Какие шаблоны проектирования в основном используются в приложениях Web/Enterprise?
Каковы некоторые из наиболее распространенных шаблонов проектирования, которые используются в Web/Enterprise Application и почему они используются?
Примечание: Ответ на вопрос, почему часть должна основываться на перечислении проблем, которые они, как правило, решают?
Ответы
Ответ 1
Я часто использую Inversion of Control.
В частности, при сохранении/загрузке объектов. Это помогает, когда мы не уверены, будут ли данные поступать из базы данных, веб-службы или какого-либо другого механизма.
Используя интерфейс и позволяя нескольким источникам выставлять простой API для сохранения/получения и позволяя самому объекту знать, какие вызовы API, чтобы мы закончили с очень простой в управлении архитектурой.
Одним из примеров этого является здесь.
Ответ 2
Singleton pattern чрезвычайно распространен. Основное использование заключается в том, чтобы убедиться, что вы никогда не создаете экземпляр более чем одного объекта данного типа, что делает его хорошей заменой для глобальных переменных, которые имеют явно злую репутацию. Существуют разные аргументы в отношении Синглтона и против него, а некоторые утверждают, что он так же плох, как и глобальные переменные.
Я использую его сам с большой группой объектов, которые я обычно называю "Менеджерами". Например, в большом приложении, требующем нескольких баз данных, вы не хотите постоянно открывать множество подключений. У меня будет класс DatabaseManager
, который является Singleton, и он будет внутренне управлять подключениями к каждой базе данных. Объект-потребитель может вызвать метод DatabaseManager::getConnection()
, и это задание менеджера, чтобы обеспечить единственное соединение (открыв его, если это необходимо), и вернуть его к потребляющему объекту.
Это решает проблему передачи по всему глобальному соединению базы данных повсюду, с боковым преимуществом эффективного использования объекта, поскольку существует только один DatabaseManager. Статические вызовы означают, что он доступен любому пользователю, который нуждается в нем.
Ответ 3
Model-View-Controller обеспечивает низкое сцепление между бизнес-логикой и уровнем представления, и это его основное значение.
Обычно каждый Контроллер является Servlet
, который обрабатывает запросы GET/POST для одной страницы, отвечая на них, представляя правильное представление или передавая юрисдикцию другому контроллеру.
Viwer превращает данные, которые Контроллер передает, в Html, Xml, JavaScript, JSON или любую другую технологию, которую вы хотите. Средство просмотра чаще всего представляет собой Servlet
или абстракцию сервлета, такую как JSP, ASP и т.д.
Модель представляет собой специфическое для домена представление данных, на которых работает приложение. Он также может быть связан с логикой домена, которая обеспечивает значение для данных (например, расчет дня рождения, итоговые суммы или стоимость доставки товаров для покупок в корзине).
Модель должна инкапсулировать данные, обеспечивающие легкий доступ независимо от основных хранилищ.
Из-за низкой когезии с MVC вы можете самостоятельно менять, разрабатывать и тестировать каждый компонент.
Этот часто используется, когда базовый механизм хранения - это база данных. В основном, что означает ActiveRecord, все свойства вашего объекта соответствуют столбцам в базовой базе данных и что каждый объект включает такие функции, как Insert, Update, Delete (и Load).
Таким образом, каждый класс преобразуется в таблицу или представление, и каждый объект становится строкой в указанной таблице.
Причина этого проста в том, что ваши классы реализуют способ доступа и редактирования базы данных, которой вы не жалеете писать дополнительный код плиты котла. Это в сочетании с популярностью баз данных достаточно, чтобы сохранить этот шаблон интересным.
Другой часто используемый Пулы. PoolManager
является Singleton, который управляет Resource
(будь то база данных, метод Factory или соединение). PoolManager хранит набор инициализированных копий.
Всякий раз, когда другой процесс или объект запрашивает ресурс через PoolManager.acquire()
, он получает один из объектов из пула.
Затем он манипулирует своей копией ресурса и возвращает его, когда он закончил с помощью Resource.release()
. Однако объект не уничтожается, он просто возвращается в пул.
Pools
используются для повышения производительности.
Например, если существует метод Factory, который имеет дорогостоящий поиск (т.е. Он медленно реагирует), он часто заверяется в экземпляры PoolManager
и N при инициализации PoolManager
, Таким образом, клиенты не чувствуют, что базовый Factory медленный, так как PoolManager
использует для них удар производительности.
Ответ 4
Я думаю, Facade и Adapter широко используются разработчиками, но они не знают, что они действительно делают.
Ответ 5
Одним из наиболее часто используемых шаблонов проектирования предприятия является Front Controller. Для этого требуется централизованная точка доступа или точка входа. Используется фреймворками J2EE, такими как стойки, трикотаж и т.д., Поэтому разработчики могут его не заметить.
Ответ 6
Model View Controller, используемый для разделения бизнес-логики с уровня представления, чтобы уменьшить ненужную жесткую связь.
Подробнее см. c2.com или wikipedia
Ответ 7
Factory шаблоны, в основном factory_object и factory_method очень распространены,
например DocumentFactory для документов xml.
Цель шаблона factory - упростить создание объекта.
Ответ 8
Я не знаю, с чего начать, поскольку вы найдете узоры повсюду (в конце концов, под капотом). Но попробуй:
- Я предполагаю, что большинство (все?) MVC-фреймворков используют Front Controller и Command [GoF].
- В распределенных приложениях очень часто используется Session Facade (реализованный с помощью Session Beans в Java), который основан на Фасад [GoF].
- ORM реализуют Unit of Work [PoEAA] шаблон (Hibernate
Session
, Toplink UnitOfWork
, JDO PersistenceManager
в мире Java).
- До сих пор очень часто используется шаблон Data Access Object для уровня доступа к данным. Аннотация Factory [GoF] и Factory Метод [GoF] - это связанные шаблоны.
- и т.д.
Ответ 9
Я нашел это полезным: http://misko.hevery.com/code-reviewers-guide/
это не вопрос, который вы задаете, но он касается некоторых шаблонов проектирования, перечисленных выше. Я настоятельно рекомендую прочитать pdf-книгу!
Надеемся на эту помощь