2010-09-08 2 views
6

В текущем (C#) проекте у нас есть сторонняя сборка, содержащая не связанный объект соединения. Используя IoC и т. Д., Мы можем вставить этот конкретный экземпляр в наш код, но это доказывает кошмар для модульного теста и т. Д. Мы используем MoQ в качестве нашей издевательской структуры, поэтому идеально в идеале могли бы работать с интерфейсом для работы, и мы не хотим пойти по пути использования чего-то вроде Moles, потому что мы хотели бы свести к минимуму технологии.Какой шаблон дизайна это?

Если мы создадим интерфейс для имитации желаемой функциональности стороннего объекта соединения, а затем создадим конструктор этого интерфейса, содержащий экземпляр стороннего объекта, тогда это позволит нашему коду работать с интерфейсом, и оба наших IoC и юнит-тесты будут счастливы. Однако в обсуждении мы крутились вокруг того, какой шаблон дизайна он на самом деле!

Так что вопрос, «ли ситуация, описанная выше и показано в коде ниже:»

  1. Adapter как мы обеспечиваем обертку к существующей функциональности.
  2. Proxy как мы доказываем интерфейс к чему-то еще.
  3. Facade потому что в рамках процесса мы предоставим упрощенный интерфейс более крупному объекту.

 

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

    public class ConnectorWrapper : IConnector 
    { 
     ThirdPartyConnector _instance; 

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

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

ответ

1

Это, безусловно, фасад. Я делаю это все время, чтобы упростить переработанные API.

+0

Вы бы сказали, что это просто фасад, или это адаптор или прокси-сервер, который также является фасадом? –

+0

@Paul - это зависит от того, насколько вы упростили код примера. Также обычно требуется адаптер для работы с существующим классом, для которого требуется определенный интерфейс. Это так? – ChaosPandion

+0

нет, это не так, введение интерфейса заключается в устранении насмешек в модульных тестах, сторонний объект не реализует никакого интерфейса. Спасибо за ваши комментарии. –

2

Быстрый ответ, фасад.

С моей GoF

адаптер:

Преобразование интерфейса класса в другой интерфейс клиенты ожидают. Адаптер позволяет командам работать вместе, что в противном случае не могло бы быть связано с несовместимыми интерфейсами.

Похоже, что это не сделано по соображениям совместимости, и говорить здесь нет.

прокси

Обеспечить суррогат или заполнитель для другого объекта, чтобы контролировать доступ к нему.

Не выглядите хорошо, это не проблема доступа.

Фасад:

Обеспечить единый интерфейс для набора интерфейсов в подсистеме. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы.

Это больше похоже на это. Вы используете интерфейсы для абстрагирования различных реализаций, тестирования и применения.

Смежные вопросы