2010-09-08 18 views
6

En un proyecto actual (C#) tenemos un ensamblado de terceros que contiene un objeto de conexión no interconectado. Usando IoC, etc. podemos inyectar esta instancia concreta en nuestro código, pero está demostrando ser una pesadilla para la prueba de la unidad, etc. Estamos utilizando MoQ como nuestro marco de burla idealmente podría funcionar con una interfaz para funcionar y no queremos para ir por el camino de usar algo como Moles porque nos gustaría minimizar las tecnologías.¿Qué patrón de diseño es este?

Si creamos una interfaz para imitar la funcionalidad deseada del objeto de conexión de terceros y luego creamos un implementador de esa interfaz que contiene una instancia del objeto de terceros, esto permitirá que nuestro código funcione fuera de la interfaz y nuestro IoC y las pruebas unitarias estarán felices. Sin embargo, en una discusión, hemos dado vueltas en círculos sobre qué patrón de diseño realmente es.

Así que la pregunta es, "es la situación descrita anteriormente y se ilustra en el código debajo de un:"

  1. Adapter como estamos proporcionando un envoltorio a la funcionalidad existente.
  2. Proxy ya que estamos proporcionando una interfaz a otra cosa.
  3. Facade porque como parte del proceso proporcionaremos una interfaz simplificada para un objeto más grande.

 

namespace ExampleCode 
{ 
    public interface IConnector 
    { 
     void Open(); 
    } 

    public class ConnectorWrapper : IConnector 
    { 
     ThirdPartyConnector _instance; 

     public ConnectorWrapper(ThirdPartyConnector instance) 
     { 
      _instance = instance; 
     } 

     void Open() 
     { 
     _instance.Open(); 
     } 
    } 
} 

Respuesta

1

Esto es definitivamente una fachada. Hago esto todo el tiempo para simplificar las API sobre ingeniería.

+0

¿Diría que se trata simplemente de una fachada, o es un adapator o proxy que también es una fachada? –

+0

@Paul - Depende de cuánto simplificó su código de ejemplo. También se requiere típicamente un adaptador para trabajar con una clase existente que requiere una cierta interfaz. ¿Es este el caso? – ChaosPandion

+0

no, no es el caso, la introducción de una interfaz es para facilitar la burla en las pruebas unitarias, el objeto de terceros no implementa ninguna interfaz en sí. Gracias por tus comentarios. –

2

Respuesta rápida, fachada.

Desde mi adaptador GoF

:

convertir el interfaz de una clase en otra interfaz de clientes esperan. Adapter permite que las clases funcionen juntas, lo que de otra forma no podría ser debido a interfaces incompatibles.

Parece que no se hace por razones de interoperabilidad, va a decir que no aquí.

Proxy

Proporcionar un sustituto o marcador de posición para otro objeto para controlar el acceso a la misma.

No se ven bien tampoco, no es un problema de acceso.

Fachada:

proporcionar una interfaz unificada para un conjunto de interfaces de un subsistema. Facade define una interfaz de nivel superior que hace que el subsistema sea más fácil de usar.

Esto se parece más a él. Está utilizando las interfaces para abstraer las diferentes implementaciones, pruebas y aplicaciones.