Principios SOLID para el diseño orientado a objetos

Preview:

DESCRIPTION

Diapositivas utilizadas en la conferencia online sobre Principios SOLID para el diseño orientado a objetos.

Citation preview

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