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:"
- Adapter como estamos proporcionando un envoltorio a la funcionalidad existente.
- Proxy ya que estamos proporcionando una interfaz a otra cosa.
- 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();
}
}
}
¿Diría que se trata simplemente de una fachada, o es un adapator o proxy que también es una fachada? –
@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
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. –