W bieżącym projekcie (C#) mamy zestaw innej firmy, który zawiera obiekt połączenia bez interfejsu. Używając IoC, itp. Możemy wprowadzić tę konkretną instancję do naszego kodu, ale okazuje się to koszmar dla testów jednostkowych, itp. Używamy MoQ jako naszego szyderczego frameworka, tak aby idealnie działało z interfejsem do pracy i nie chcemy pójść drogą korzystania z czegoś takiego jak Moles, ponieważ chcielibyśmy zminimalizować technologie.Który wzór jest taki?
Jeśli utworzymy interfejs, który naśladuje pożądaną funkcjonalność obiektu połączenia zewnętrznego, a następnie utworzy implementator tego interfejsu zawierającego instancję obiektu podmiotu zewnętrznego, umożliwi to naszemu kodowi pracę z interfejsem i naszym IoC a testy jednostkowe będą szczęśliwe. Jednak podczas dyskusji w kółko zastanawialiśmy się, jaki to naprawdę jest wzór projektu!
Więc pytanie brzmi: „Czy sytuacja opisana powyżej i zilustrowane w kodzie poniżej:”
- Adapter jak dajemy owijkę do istniejącej funkcjonalności.
- Proxy jako że udajemy interfejs do czegoś innego.
- Facade ponieważ w ramach tego procesu udostępnimy uproszczony interfejs większemu obiektowi.
namespace ExampleCode
{
public interface IConnector
{
void Open();
}
public class ConnectorWrapper : IConnector
{
ThirdPartyConnector _instance;
public ConnectorWrapper(ThirdPartyConnector instance)
{
_instance = instance;
}
void Open()
{
_instance.Open();
}
}
}
Czy powiedziałbyś, że to tylko fasada, czy też jest to adaptator lub serwer proxy, który jest również fasadą? –
@Paul - To zależy od tego, jak uprościłeś swój przykładowy kod. Zwykle adapter jest wymagany do pracy z istniejącą klasą, która wymaga określonego interfejsu. Czy tak jest? – ChaosPandion
Nie, to nie jest tak, wprowadzenie interfejsu ma ułatwić kpiny w testach jednostkowych, obiekt zewnętrzny nie implementuje żadnego interfejsu. Dzięki za twoje komentarze. –