Краткие тезисы книги М.Фаулера Шаблоны корпоративных приложений
Три слоя
Представление — отображение данных, обработка пользовательских событий, запросов
Домен — Бизнес-логика приложения
Источник данных — управление БД и пр.
Бизнес-логика
Сценарий транзакции (Transaction Script)
стр. 133
Организует бизнес-логику в процедуры, которые управляют каждая своим запросом. В некоторых случаях это может быть просто вывод данных из БД. В других случаях эти действия могут содержать в себе множество вычислений и проверок. Но для каждого пользовательского действия должна быть определена единая процедура, содержащая необходимые действия.
Модель предметной области (Domain Model)
стр. 140
Cеть взаимосвязанных объектов, в которой каждый объект представляет собой отдельную значащую сущность: может быть настолько большую, как корпорация или настолько малую, как строка из формы заказа.
Модуль таблицы (Table Module)
стр. 148
Очень напоминает DomainModel. Однако, если в Domain Model каждый объект сущности соответствует одному объекту класса, то в данном паттерне 1 объект управляет всеми объектами представляемой сущности.
Слой служб (Service Layer)
стр. 156
Инкапсулирует бизнес-логику приложения, предоставляя интерфейс, который принимает на себя взаимодействие с «внешним миром»
Источники данных
Шлюз таблицы данных (TableDataGateway)
стр. 167
Представляет собой объект-прослойку между таблицей и приложением. В нем реализованы методы, которые позволяют выполнять операции над таблицей, не вдаваясь в подробности SQL-команд.
Шлюз записи данных (RowDataGateway)
стр. 175
см. Шлюз таблицы данных, только для 1 строки
Активная запись (ActiveRecord)
стр. 182
объект управляет и данными и поведением, подобно Шлюз записи данных предоставляет операции с записью таблицы, а также дополняется методами прочих операций.
Преобразователь данных (DataMapper)
стр. 187
Паттерн разделяющий объект и БД, служащий прослойкой между ними, направлен на исключение из класса объекта кода по работе с БД.
Моделирование поведения
Единица работы (Unit Of Work)
стр. 205
По сути представляет собой объект работы транзакции. Отслеживает изменения в БД.
Коллекция объектов (Idenity Map)
стр. 216
хранит записи об объектах, которые были извлечены из БД. при запросе, сначала ищет объект в коллекции, а затем идет в БД.
Загрузка по требованию (LazyLoad)
стр. 222
паттерн, использующий стратегию загрузки данных только тогда, когда они нужны. сейчас широко распространен в JS расширениях, когда изображения и данные загружаются только тогда, когда пользователь действительно должен их увидеть.
- Lazy Initialization (Ленивая Инициализация) использует специальный макер (обычно null), чтобы пометить поле, как не загруженное. При каждом обращении к полю проверяется значение маркера и, если значение поля не загружено — оно загружается.
- Virtual Proxy (Виртуальный Прокси) — объект с таким же интерфейсом, как и настоящий объект. При первом обращении к методу объекта, виртуальный прокси загружает настоящий объект и перенаправляет выполнение.
- Value Holder (Контейнер значения) — объект с методом getValue. Клиент вызывает метод getValue, чтобы получить реальный объект. getValue вызывает загрузку.
- Ghost (Призрак) — объект без каких-либо данных. При первом обращении к его методу, призрак загружает все данные сразу.
Предоставление данных в WEB
Модель — представление — контроллер (MVC)
стр. 347
основа большого количества фреймворков, отвечающая делению на слои, которые указаны в начале данного поста.
Контроллер страниц (Page Controller)
стр. 350
паттерн, предполагающий наличие контроллера для каждой отдельно взятой web-страницы. анализирует url, извлекает данные из модели, определяет представление, которое должно быть предоставлено пользователю.
Контроллер запросов (Front Controller)
стр. 362
предоставляет объкт-обработчик, который объединяет действия по обработке запроса (контроль доступа, язык, спец. возможности)
Представление по Шаблону (Template View)
стр. 368
представляет возможности динамического изменения шаблона, используя замену специальных вставок (маркеров) на соответствующую им информацию.
Представление с преобразованием (Transform View)
стр. 379
представление данных, полученных из модели в пригодном для отображения на странице виде.
Двухэтапное представление (Two step view)
стр. 383
получает данные от модели в некую логическую структуру, которая затем проходит второй этап и встраивается в страницу.
Контроллер приложения (Application Controller)
cтр. 397
Перемещает логику выбора действия над моделью или отображения преставления в одну точку, к которой обращается контроллер входа.
Распределенная обработка данных
Интерфейс удаленного доступа (Remote Facade)
стр. 405
Предоставляет более общий интерфейс, объединяющий вызовы более мелких методов объекта. Позволяет сэкономить межсетевое взаимодействие.
Объект переноса данных (Data Transfer Object)
стр. 419
Позволяет за один запрос-ответ получить данные например по нескольким объектам, также экономя ресурсы на обращение к удаленному интерфейсу. В ответ мы получаем сериализованный объект, например по формату json, xml.
Базовые типовые решения
Шлюз (GateWay)
стр. 483
Объект, который инкапсулирует доступ к внешней системе или ресурсу.
Преобразователь (Mapper)
стр. 489
Объект, который управляет сообщением между независимыми друг от друга объектами.
Супертип слоя (Layer Supertype)
стр. 491
Это суперкласс для всех объектов слоя, объединяющий основные функции.
Отдельный интерфейс (Separated Interface)
стр. 492
Выделение какого-либо интерфейса к объекту в отдельный от объекта пакет. Обычно нужно для реализации логики, противоречащей концепции.
Реестр (Registry)
стр. 495
Паттерн реализующий статический набор методов, который позволяет организовать хранилище объектов с адресацией по ключам.
Объект-значение (Value Object)
стр. 500
объект класса, который хранит специфические значения, реализующий например нестандартную логику сравнения.
Деньги (Money)
стр. 502
Класс реализующий объекты денег, и методы их сложения, перевода, округления и т.п.
Частный случай (Special Case)
стр. 511
Практика вместо null значений возвращать объект класса с тем же интерфейсом, чтобы сократить ситуации с вызовом метода от null.
Дополнительный модуль (Plugins)
стр. 514
Связывает классы на основе конфигурации, а не явного указания в коде.
Фиктивная служба (Service stub)
стр. 519
заглушка, использующаяся как на этапе разработки и тестирования, чтобы не вносить ложные данные в продуктивный контур сервиса, так и для обхода зависимости системы от работоспособности стороннего сервиса.
Множество записей (Record Set)
стр. 523
Предоставляет объект соответствующий результату запроса к таблице или записи, позволяющий добавлять бизнес-логику.