Principios y arquitectura / Inyección de dependencias
Composite
Notas originales de SunDiaL · Ver fuente en inglés
El problema: empiezas a tener varias clases que implementan la misma interfaz. La solución: crear una clase «Composite» que implemente la misma interfaz que las clases originales.
Así respetas el principio de responsabilidad única, porque quien llama no debería saber ni preocuparse de si está llamando a una sola clase o a varias.
public interface INotificationService
{
public void PushNotification(string message)
}
public class DesktopNotificationService : INotificationService
{
public void PushNotification(string message)
{
// complicated code here
}
}
public class MobileNotificationService : INotificationService
{
public void PushNotification(string message)
{
// complicated code here
}
}
public class CompositeNotificationService : INotificationService
{
private IEnumerable<INotificationService> services;
public void PushNotification(string message)
{
foreach(INotificationService service in services)
{
service.PushNotification(message);
}
}
}