2011-09-29 12 views
7

¿Puede alguien definir para mí la diferencia conceptual entre un proveedor, un servicio y un intermediario?Nomenclatura y aclaración de patrones de diseño: proveedor, servicio, intermediario

Escribo regularmente aplicaciones MVC y descargo gran parte de la lógica comercial a otras clases. Nada especial, solo ingrese los parámetros y reciba las instancias de POCO.

¿Cuál es la etiqueta correcta para dar a las clases que realizan el trabajo pesado para mi controlador (es)?

+0

una pregunta interesante, pero (Proveedor de Servicio, Broker) se refiere a las reglas de denominación. ¡No es un patrón de diseño (como admites en tu título)! ¿Estas de acuerdo conmigo? –

+0

Tengo entendido que existen patrones de diseño de Proveedor y Corredor, pero podría estar equivocado. Sin embargo, sí, tiene razón, mi pregunta específica es sobre la convención de nomenclatura del comportamiento que estoy presentando. Cómo nombrar la (s) clase (es) a la que estoy descargando la responsabilidad. – Shawn

+0

Un intermediario transfiere datos o eventos entre otros objetos. Toma un rol más activo que (por ejemplo) un proveedor, pero tiende a ser solo para la transferencia. Un poco como un corredor de la vida real, en realidad no proporciona servicios en sí mismo. –

Respuesta

21

Un proveedor es en realidad otro nombre para el Strategy Pattern

Normalmente, cuando alguien menciona el uso de un proveedor que están hablando de algunos contratos abstracta a la que podrían existir muchas implementaciones.

//As an abstract base class 
public void SetupRoles(RoleProvider provider){} 

//As an interface 
public void SetupRoles(IRoleProvider provider){} 

//As a delegate 
public void SetupRoles(Action<String> addRole){} 

Un servicio suele indicar un objeto sin estado que solo tiene métodos. Un servicio podría ser utilizado como una Estrategia, pero no necesariamente tiene que serlo.

//Plain old service... doesn't even need the web 
// CRAZY TALK MAN!!! 
public static class RoleService 
{ 
    public static void SetupRoles(){}; 
    public static String[] GetRoles(){}; 
} 

Un Broker es realmente responsable de la intermediación así .... Está diseñado para mover mensajes entre servicios y objetos, orquestando las interacciones entre servicios para mantenerlos aislados.

public class Broker 
{ 
    public void SendImportantMessage(Message msg) 
    { 
     //Do some important processing here 
     // Maybe some validation 
     NotifySomeOtherServiceOrClassOrMaybeBobFromAccounting(msg); 
    } 
} 
+1

Esto es exactamente lo que estaba buscando. Excelente explicación Gracias. – Shawn