Date post: | 17-Dec-2014 |
Category: |
Technology |
Upload: | netmind |
View: | 374 times |
Download: | 3 times |
SOLID design principles
En el inicio...
El software
cambia
Rigido
cambios en cascada
Fragil
elementos no
relacionados se
rompen al hacer
un cambio
Inamovible
poca reutilización
copy-paste
Pringoso
es dificil entender
el diseño inicial
abres, cierras y
bye
SOLID no todo son principios
SOLID = gestión dependencias
las dependencias te matan
diseño te salva
Que son dependencias?
framework
var cutomer = new Customer()
web services
BD
Hipótesis
http://martinfowler.com/bliki/DesignStaminaHypothesis.html
€
Si el proyecto sigue vivo,
te costará más dinero
SOLID
Michael Feathers for the "First five principles" Robert C Martin SOLID http://social.technet.microsoft.com/wiki/contents/articles/18033.software-design-principles.aspx
Single responsability
Open/closed
Liskov substitution
Interface segregation
Dependency Inversion
Single Responsability
"A class should have only one reason to change. " http://social.technet.microsoft.com/wiki/contents/articles/18061.single-responsibility-principle.aspx
Open - Closed
"Open for extension, closed for modification"
Liskov substitution
"Derived classes must be able to substitute for their base classes" Child class must not remove base class behavior
Interface segregation
"many client-specific interfaces are better than one general-purpose interface."
http://social.technet.microsoft.com/wiki/contents/articles/18061.single-responsibility-principle.aspx
Dependency Inversion
"High level modules should not depend upon low level modules, rather both should depend upon abstractions" http://social.technet.microsoft.com/wiki/contents/articles/18061.single-responsibility-principle.aspx
OCP = Objetivo
SRP + DIP = estrategias de código
LSP= formula confusa
ISP = No parece tener aplicación
Al final todo va de gestión de dependencias
El diseño va de dependencias
Si haces referencia a algo ----> dependes de
ello
Si tu dependencia cambia ----> tu debes cambiar
para evitar dependencias
loosely coupled - DIP
highly cohesive - SRP
easily composable - dependencias
context independent - dependencias
http://www.growing-object-oriented-software.com/
código independencia
Single responsability
Dependency Inversion
Open/closed
Liskov substitution - > subclases
Interface segregation -> static languages
http://www.growing-object-oriented-software.com/
código!
Inversion de dependencias
UI
Business Logic
Data access
Inversion de dependencias
UI
Business Logic
Data access
Resistencia
code smell
abraza el problema, y arreglalo
test depende de ---> tu código
TDD se hace complicado si no hay diseño
autoexamen
existe repetición?
tiene una responsabilidad?
cambia todo al mismo ritmo?
depende de cosas que cambian poco?
Fin