2010-09-08 10 views
6

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:

  1. Adapter jak dajemy owijkę do istniejącej funkcjonalności.
  2. Proxy jako że udajemy interfejs do czegoś innego.
  3. 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(); 
     } 
    } 
} 

Odpowiedz

1

Jest to zdecydowanie elewacji. Robię to cały czas, aby uprościć przeprojektowane interfejsy API.

+0

Czy powiedziałbyś, że to tylko fasada, czy też jest to adaptator lub serwer proxy, który jest również fasadą? –

+0

@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

+0

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. –

2

Szybka odpowiedź, fasada.

Z mojego GoF

Adapter:

Konwersja interfejsu klasy do innego interfejsu klienci oczekują. Adapter pozwala klasom współdziałać, które nie mogłyby inaczej z powodu niezgodnych interfejsów.

Wygląda na to, że nie wydaje się, że robimy to ze względu na interoperacyjność.

Proxy

Podaj surogat lub zastępczy do innego obiektu, aby kontrolować dostęp do niego.

Nie wygląda dobrze, nie jest to problem z dostępem.

Fasada:

Zapewnić ujednolicony interfejs do zestawu interfejsów w podsystemie. Fasada definiuje interfejs wyższego poziomu, który ułatwia korzystanie z podsystemu.

Wygląda bardziej na to. Używasz interfejsów do streszczenia różnych implementacji, testów i aplikacji.

Powiązane problemy