code_design.pdf

24
Diseño de código Nicolás Paez Mayo 2009

Transcript of code_design.pdf

  • Diseo de cdigo

    Nicols PaezMayo 2009

  • Orgullo

  • Profesionalismo

  • Motivacin

    Percepcin:

    El software es infinitamente

    modificable

    Realidad:

    El software soporta un negocio,

    y todo negocio cambia, entonces

    el software se adapta o se tira

  • Objetivos

    Mantenibilidad

    Simplicidad

    ClaridadFlexibilidad

    Legibilidad

  • Principios S.O.L.I.D

    Single responsability principle

    Open close principle

    Liskov substitution principle

    Interface segregation principle

    Dependency inversion principle

  • Bajo acoplamiento

    Cada clase representa una nica

    abstraccin (entidad/proceso)

    Debe poder nombrasela facilmente

    con un sustantivo

    Agrupar la lgica segn su

    estabilidad

    Aislar detalles de implementacin

    en clases separadas

  • Alta cohesin

    Cada clase representa una nica

    abstraccin

    Agrupar la lgica contemplando su

    estabilidad

    Aislar detalles de implementacin

  • Clases

    Datos y lgica juntos

    Tasa de cambio

    Simetria

    Repeticin mnima

  • Nombres

    No amarretear

    Deben reflejar el rol

    Deben indicar el qu y no el como

    Utilizar convenciones

  • Legibilidad

    Identar

    Hablar en trminos del problema y

    no de la solucin

    No utilizar valores en duro,

    utilizar constantes o enumerados

    No utilizar 0/1 como true/false

    Respetar convenciones

  • Constructores

    Deben dejar la instancia en un

    estado vlido y lista para actuar

    En lugar de agregar varios

    constructores, ofrecer mtodos de

    clase que agreguen semntica

  • Mtodos

    Visibilidad mnima

    Indicar posibles excepciones

    Minimizar condicionales

    Evidenciar condiciones de corte

    de los cicles

  • Posibilidad de prueba :(

    Mensajero Socket

  • Posibilidad de prueba :)

    Mensajero ISocket

    Socket MockSocket

  • Parmetros

    Nombrarlos segn el rol y segn

    el tipo

    Ordenarlos segn algn criterio

    En caso de valores por defecto

    proveer sobrecarga

  • Comentarios

    Repetidores de cdigo

    Explicadores de cdigo

    Marcadores (TODO)

    Resumenes de cdigo

    Descriptores de la intencin del

    cdigo

    Informacin que no puede

    expresarse en el cdigo

  • Comentarios (cont.)

    Evolucionan con el cdigo

    No deberian ser demasiados

    Simples y fciles de actualizar

    cc2e/3252

  • Excepciones

    No son un sistema de mensajeria

    Excepciones funcionales

    Violaciones a reglas de negocio

    Posibilidad de reintente

    Excepciones tcnicas

    Blue screens

    Deben registrarse

    Son ajenas a la aplicacin

  • Los sospechosos de siempre

    Clases sin mtodos

    Clases con muchos mtodos

    pblicos

    Clases aisladas

    Warnings del compilador

  • Una pequea ayuditade mis amigos

    Verificadores de cdigo

    Style Cop, Check-Style, FxCop

    IDEs

    Eclipse, Visual Studio

    Revisiones por pares

  • Programmers needs to think,

    communicate and learn, that

    is part of being professional

    Kent Beck

  • You can't get always

    what you want

    The Rolling Stones, 1968

  • Referencias Code Complete, Steve McConnel

    (obligatorio, clsico, nivel

    inicial)

    Implementation Patterns, Kent Beck

    (nivel intermedio)

    Refactoring, Kent Beck (nivel

    intermedio, clsico)

    Foundations of programming, Karl

    Seguin (nivel avanzado)

    Pgina 1Pgina 2Pgina 3Pgina 4Pgina 5Pgina 6Pgina 7Pgina 8Pgina 9Pgina 10Pgina 11Pgina 12Pgina 13Pgina 14Pgina 15Pgina 16Pgina 17Pgina 18Pgina 19Pgina 20Pgina 21Pgina 22Pgina 23Pgina 24