DCIC - UNS
Desarrollo de Aplicaciones Empresariales 190
Bibliografa
Introduccin
http://www.objectmentor.com/resources/articles/
Principles_and_Patterns.pdf
O Open/Closed Principle
Interface Segregation
Principle
D Dependency Inversion
Principle
Introduccin (cont.)
Consideraciones
Reglas Bsicas
21/05/2014
Manejo de la conexin
Comunicacin de datos
Es necesario separarlas?
Sera mejor tener dos interfaces: DataChannel (send, recv) y Connection (dial,
hangup)
Sin embargo, como son funcionalidades que no se entremezclan y que
cambian por distintas razones, su implementacin podra seguir estando en
una nica clase.
+dibujar()
+area(): double
Usa Rectngulo para ayudarla con las matemticas de las figuras geomtricas.
Nunca dibuja un rectngulo en la pantalla.
Aplicacin
Grfica
Aplicacin
Grfica
Rectngulo
GUI
Ejemplo 1: Super-Rectngulo
Aplicacin
Geomtrica
Rectngulo
Geomtrico
+area(): double
Rectngulo
+dibujar()
+area(): double
GUI
Posible Solucin:
La clase Cuenta
no tiene nocin
sobre quin la
posee.
Persona puede o bien exponer la
propiedad Cuenta, o replicar la interfaz de
Cuenta, delegando la implementacin de
sus mtodos
Desarrollo de Aplicaciones
Empresariales 200
}
21/05/2014
Usar capas
/// <summary>
/// Gets, saves, and submits orders.
/// </summary>
public class OrderService
{
public Order Get(int orderId) {...}
public Order Save(Order order) {...}
public Order SubmitOrder(Order order) {...}
}
La clave es la ABSTRACCIN
Desarrollo de Aplicaciones Empresariales 203
Ejemplo 1: Abstracto
No soporta OCP
Soporta OCP
21/05/2014
21/05/2014
Qu problema encuentran
con la siguiente funcin
cuando se le pasa una
instancia de Cuadrado?
Qu fall?
Definicin:
Modelo
Cliente
void SaveAll(List<IPersistedResource> res)
{
res.ForEach(r => r.Persist());
}
List<IPersistedResource> LoadAll()
{
var all = new List<IPersistedResource>
{
new UserSettings(),
new ApplicationSettings()
};
all.ForEach(r => r.Load());
return all;
}
Solucin:
Mejor Solucin:
Separar la interfaz IPersistedResource en IPersistResource e ILoadResource y
asignarle a cada cliente la interfaz ms apropiada.
21/05/2014
Escenario
Implementaciones de ISP
Consideraciones
TimedDoor tiene dos interfaces utilizadas por dos tipos de cliente distintos:
Timer y los clientes de Door.
Los clientes de TimedDoor no necesitan acceder a las dos interfaces a la vez,
slo necesitan conocer una o la otra.
Esto nos llevara a separar las interfaces y que cada tipo de cliente consuma
la interfaz que necesita.
Solucin 1 : Herencia
21/05/2014
Implementaciones de ISP