М.Фаулер Шаблоны корпоративных приложений.

Краткие тезисы книги М.Фаулера Шаблоны корпоративных приложений

Три слоя

Представление — отображение данных, обработка пользовательских событий, запросов

Домен — Бизнес-логика приложения

Источник данных — управление БД и пр.

 

Бизнес-логика

Сценарий транзакции (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

Предоставляет объект соответствующий результату запроса к таблице или записи, позволяющий добавлять бизнес-логику.

 

 

 

 

Почему в djnago _id предпочтительнее .id?

Вопрос:
Почему в djnago _id предпочтительнее .id?
Ответ:
потому что при a.b.id будет запрос к БД, а при a.b_id запроса не произойдет