В текущем (C#) проекте у нас есть сторонняя сборка, содержащая не связанный объект соединения. Используя IoC и т. Д., Мы можем вставить этот конкретный экземпляр в наш код, но это доказывает кошмар для модульного теста и т. Д. Мы используем MoQ в качестве нашей издевательской структуры, поэтому идеально в идеале могли бы работать с интерфейсом для работы, и мы не хотим пойти по пути использования чего-то вроде Moles, потому что мы хотели бы свести к минимуму технологии.Какой шаблон дизайна это?
Если мы создадим интерфейс для имитации желаемой функциональности стороннего объекта соединения, а затем создадим конструктор этого интерфейса, содержащий экземпляр стороннего объекта, тогда это позволит нашему коду работать с интерфейсом, и оба наших IoC и юнит-тесты будут счастливы. Однако в обсуждении мы крутились вокруг того, какой шаблон дизайна он на самом деле!
Так что вопрос, «ли ситуация, описанная выше и показано в коде ниже:»
- Adapter как мы обеспечиваем обертку к существующей функциональности.
- Proxy как мы доказываем интерфейс к чему-то еще.
- Facade потому что в рамках процесса мы предоставим упрощенный интерфейс более крупному объекту.
namespace ExampleCode
{
public interface IConnector
{
void Open();
}
public class ConnectorWrapper : IConnector
{
ThirdPartyConnector _instance;
public ConnectorWrapper(ThirdPartyConnector instance)
{
_instance = instance;
}
void Open()
{
_instance.Open();
}
}
}
Вы бы сказали, что это просто фасад, или это адаптор или прокси-сервер, который также является фасадом? –
@Paul - это зависит от того, насколько вы упростили код примера. Также обычно требуется адаптер для работы с существующим классом, для которого требуется определенный интерфейс. Это так? – ChaosPandion
нет, это не так, введение интерфейса заключается в устранении насмешек в модульных тестах, сторонний объект не реализует никакого интерфейса. Спасибо за ваши комментарии. –