Какой это шаблон дизайна? - PullRequest
6 голосов
/ 08 сентября 2010

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

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

Итак, вопрос в том, " Является ли описанная выше ситуация и проиллюстрирована в следующем коде: "

  1. Адаптер поскольку мы предоставляем оболочку для существующих функций.
  2. Proxy , поскольку мы предоставляем интерфейс для чего-то другого.
  3. Фасад , поскольку в рамках этого процесса мы будем предоставлять упрощенный интерфейс для более крупного объекта.

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

    public class ConnectorWrapper : IConnector
    {
       ThirdPartyConnector _instance;

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

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

Ответы [ 2 ]

2 голосов
/ 08 сентября 2010

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

Из моего GoF

адаптер:

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

Похоже, что это не сделано по причине совместимости, скажу "нет" здесь.

Proxy

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

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

Фасад:

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

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

1 голос
/ 08 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...