Подтвердить что ты не робот

В чем разница между шаблонами дизайна Facade и Gateway?

или Facade == Gateway?

4b9b3361

Ответ 1

Пересмотрев фасад в книге GoF и ссылку в другом ответе на Martin Fowler Gateway, кажется, что их фокус находится в противоположных направлениях.

Фасад обеспечивает простой единообразный вид сложных внутренних элементов (одного или нескольких) внешних клиентов;

Шлюз обеспечивает простой единообразный вид внешних ресурсов для внутренних приложений.

Это различие позволяет нам сосредоточиться на том, что более важно в дизайне:

С фасадом внешняя система - наш клиент; лучше добавить сложность, обратившись внутрь, если упростить внешний интерфейс.

С Gateway внутренняя система является нашим клиентом; дайте ему всю помощь, которую мы можем, даже если внешние являются более сложными.

Ответ 2

Эти два шаблона очень похожи в том смысле, что оба они служат в качестве оберток над чем-то. Разница в контексте: фасад стоит над группой подсистем, а шлюз может стоять над любой функциональностью. С этой точки зрения, для меня Facade - это конкретный случай Gateway (не противоположный).

Фасад применяется, если мы считаем, что работа с подсистемами сложна или, если мы хотим сгруппировать несколько подсистемных вызовов в один [метод]. Однако это не обязательно означает, что подсистемы недоступны или что они достаточно сложны. Это просто означает, что у нас есть подсистемы.

Шлюз применяется, когда мы хотим обернуть некоторые вещи и разоблачить их по-разному. Шлюз может быть обертыванием не подсистемы, а просто относительно сложной функциональностью. Gateway - это общий шаблон, который можно рассматривать как основу для Facade, Proxy и других шаблонов.

Если для пояснения еще нужен пример:

Фасад может рассчитать кредитоспособность клиента, запросив подсистему проверки счетов, подсистему кредитных счетов, сберегательную подсистему и подсистему бэк-офиса (думаю, я видел аналогичный пример в книгах GOF).

class MortgateFacade {
    bool IsCreditWorth(string customerName) {
        return !_checkingAccSystem.HasNegativeBalance(customerName) && !_creditAccSystem.HasNegativeCredit(customerName) && !_backOfficeSystem.IsInBlackList(customerName);
    }
}

Шлюз может запрашивать таблицу базы данных и возвращать клиенту по идентификатору. (Да, это просто!)

class CustomersGateway {
    Customer GetCustomer(int id) {
        return _db.ExecuteOne("SELECT TOP 1 FROM CUSTOMERS WHERE CUSTOMER_ID="+id).AsCustomer();
    }
}

[Очевидно, это псевдокод]

Ответ 3

Намерение Фасада дается http://c2.com/cgi/wiki?FacadePattern как

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

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

Шаблон шлюза не является одним из исходных шаблонов GOF, и я рассматриваю его скорее как шаблон интеграции предприятия, то есть на более высоком уровне, чем Facade. См. Определение Fowler

Я вижу, что Gateway главным образом скрывает технологическую сложность, а не сложность интерфейса - скрывая детали подключения к мэйнфреймам и внешним системам. На самом деле я часто ожидаю, что шлюз станет чем-то вроде маршрутизатора запроса, возможно, даже выбрав различные бэкэнд-системы на основе деталей запроса. Поэтому я вижу, что Gateway фокусируется на вещах, к которым он подключается.

Очевидно, что неофициально Gateway является Facade, поскольку он скрывает детали, но я думаю, что когда вы реализуете GOF Facade и Fowler Gateway, вы в конечном итоге делаете совсем другие вещи.

Ответ 4

Я думаю, что Gateway - это конкретный случай Facade - фасад над внешней системой.

Ответ 5

Это может быть несколько упрощено, но вот мой подход к нему.

  • При использовании шаблона Facade вы предоставляете интерфейс, который другие могут использовать для разговора с вашим приложением. Пример: Вы внедрили какое-то приложение с несколькими "модулями", чтобы облегчить доступ к "модулям", вы создаете Facade, чтобы упростить взаимодействие с модулями... одна точка контакта.
  • При использовании шаблона Gateway вы инкапсулируете какую-либо внешнюю часть, которую хотите использовать. Пример: вы хотите использовать ведение журнала, но не хотите привязываться к определенной структуре ведения журнала, в этом случае вы можете определить свой шлюз, который определяет функциональность, которую вы хотите использовать, и позволить шлюзу обрабатывать взаимодействие с базой ведения журнала, которую вы хотите использовать. Это упростит изменение структуры ведения журнала в будущем.

Ответ 6

Здесь прямая цитата из книги Фаулера:

В то время как Facade упрощает более сложный API, он обычно выполняется с помощью писатель службы общего пользования. Шлюз написан клиент для его конкретного использования. Кроме того, Фасад всегда подразумевает другой интерфейс к тому, что он покрывает, тогда как шлюз может копировать полностью завернутый фасад, используемый для замещения или тестирования целей.

[Глава 18]

Ответ 7

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

Ответ 8

Проще говоря, Facade - это шаблон дизайна, а Gateway - архитектурный шаблон.

Application Gateway, например, является шаблоном архитектуры инфраструктуры. node находится в DMZ и изолирует внутренние узлы от внешних клиентов, которые могут подключаться только к шлюзу приложения.

Когда вы думаете о шаблонах архитектуры, подумайте о узлах. Когда вы думаете о шаблонах проектирования, подумайте о классах/объектах.

Node представляет собой абстракцию: аппаратно-аппаратных средств и системного программного обеспечения - например, ОС, платформа/структура и т.д. Системное программное обеспечение "назначено" устройству. node "инкапсулирует" как устройство, так и системное программное обеспечение и относится к другим узлам, содержащим архитектуру.

Шлюз - это node, который изолирует узлы сервера от клиентских узлов - клиент node не может напрямую подключиться к серверу node. Шлюз принимает соединение, а затем устанавливает соединение непосредственно с пунктом назначения node.

Ответ 9

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

то есть:

  • Фасад - ваш простой прокси-сервер для куча сложных классов.

  • Адаптер является прокси-сервером для частей система с несовместимыми интерфейсами как тот, который нам нужен в данный момент

  • и т.д...

Судя по тому, что я нашел в поиске Google для "шаблона шлюза", кажется, что Gateway == Proxy: D

Ответ 10

Чтобы ответить на ваш вопрос, я бы не сказал, что Facade == Gateway, но это Facade≈Gateway. Под этим я подразумеваю, что они примерно равны, как они отличаются друг от друга, по-видимому, не ясны, основываясь на других мнениях выше.

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

Ответ 11

A шаблон фасада. Основное значение - это " упростить" использование внутренних компонентов (за фасадом). Это может быть так, что одна точка входа или функция на фасаде будут использовать несколько функций внутренних компонентов. Если шлюз приносит одно и то же значение " упрощающий" использование API или компонентов позади него, то его можно считать фасадом. В других ситуациях шлюз может быть просто промежуточным программным обеспечением, адаптером, оболочкой или элементом переадресации вызова в архитектуре. Или шлюз может носить несколько шляп, например, упростить несколько потоков, пересылать некоторые вызовы, одновременно работая как промежуточное программное обеспечение для проверки подлинности или авторизации. Таким образом, шлюз IMHO представляет собой абстрактный абстрактный шаблон, который может охватывать один или несколько конкретных структурных шаблонов, таких как фасад, адаптер, обертка, декоратор или промежуточное программное обеспечение и т.д..

Определение шлюза Martin Fowler имеет узкую природу (по крайней мере, здесь) и ближе к API-шлюзы, работающие как декодеры .

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