Служба — это способ написания интерфейса для внешней системы, такой как хранилище удостоверений LDAP, платежный шлюз или интерфейс управления приложениями. Это концептуальный взгляд на внешнюю систему как на поставщика полезных услуг, возможно, с внутренним поведением, а не как на пассивную массу, над которой нужно работать.
Фасад — это способ обернуть что-либо (включая сервис), чтобы красиво представить его другому компоненту. Фасады часто используются, когда:
- Библиотека или компонент сложны, и вашему приложению требуется только их часть. Ваш Фасад представляет упрощенный API для приложения
- Вы используете несколько библиотек или компонентов и вам необходимо их унифицировать, представив приложению единый API
- Библиотека, которую вы используете, имеет сложную настройку или набор зависимостей, а фасад оборачивает все это в контексте вашего приложения.
Что действительно сбивает с толку, так это то, что вы можете (и часто делаете) создать фасад над одним или несколькими сервисами. Служба — это то, как компонент фактически получает доступ к ресурсу, а фасад — это то, что упрощает компонент (например, настройку параметров, подключение и т. д.).
Если вы напишите свой собственный DAO, вы, вероятно, создадите свой сервис именно так, как вам нужно, поэтому написание фасада является признаком того, что вы сделали это неправильно. Если DAO создан третьей стороной и более сложен, чем ваши потребности, тогда вы можете фасадировать сервис.
Теперь служба — это способ выполнения вызовов нескольких DAO для получения сложных структур данных (я не слишком уверен в этом, но пока это то, что я понимаю).
Я бы сказал, что DAO — это собственный шаблон проектирования — см. википедию.
Если мы сравним DAO со службой, мы получим:
- Level of API:
- DAO: Fine-grained access to properties
- Служба: грубый доступ к службам
- Where implementation lies:
- DAO: Mainly on the client, but storing data (without behavior) in the database
- Сервис: В основном на сервере
- How the interface is invoked
- DAO: The client directly binds to the object in the same namespace and JVM
- Служба: клиент — это просто заглушка для работы в сети, между виртуальными машинами или между пространствами имен.
... фасад может прекрасно обращаться к нескольким DAO для выполнения сложной операции, предоставляя простой интерфейс, и сервис кажется чем-то похожим.
Фасад может обернуть слой DAO, но я не вижу в этом полезного способа. Скорее всего, вам нужен API для доступа к отдельным свойствам объектов, обхода графа объектов и тому подобного, и это именно то, что предоставляет DAO.
То же самое происходит с транзакциями, я понимаю, что служба - это место для начала транзакций...
Безусловно, потому что транзакция — это услуга, предоставляемая базой данных и другим компонентом или системой.
... но я в равной степени чувствую, что их также можно разместить на фасадах, в конце концов, фасад может также вызывать несколько DAO.
И во многих отношениях служба диспетчера транзакций является фасадом гораздо более сложной серверной реализации, координирующей транзакцию в Интернете, приложении, базе данных и других компонентах, поддерживающих транзакции. Однако это уже абстрагировано реализацией службы транзакций. Что касается нас, пользователей, то есть только публичный интерфейс.
В этом, собственно, и заключается концептуальный смысл этих шаблонов проектирования — предоставить пользователю ровно столько API, сколько нужно, абстрагировавшись от сложностей реализации за железную стену компонентного интерфейса.
Итак, какой стек будет иметь больше смысла
контроллер-фасад-дао контроллер-сервис-дао
или, может быть
контроллер-фасад-дао И иногда контроллер-фасад-сервис-дао ??
- DAO — это своего рода служба для базы данных, но на самом деле DAO — это сам шаблон проектирования.
- Если вы пишете свой собственный DAO, вам никогда не понадобится фасад.
Поэтому правильный ответ:
person
Andrew Alcock
schedule
26.02.2013