Архітектура корпоративних програмних додатків () — книга написана Мартіном Фаулером, яка описує шаблони проєктування, необхідні при розробці корпоративних додатків.
Вміст
Шаблони у книзі поділені на декілька груп.
Базові шаблони
Група шаблонів, які описують базові проблеми.
Об'єкт-значення (Value Object) — описує об'єкт, який повністю ідентифікується своїми атрибутами. Гроші (Money) — представляє гроші, як структуру даних у програмі. Особливий випадок (Special Case) — дозволяє уникнути логіки перевірки наявності об'єкта. Супертип рівня (Layer Supertype) — містить повторювану логіку аплікації. Відокремлений інтерфейс (Separated Interface) — допомагає зменшити зв'язність між компонентами шляхом відокремлення абстракції та реалізації. Шлюз (Gateway) — інкапсулює доступ до зовнішнього ресурсу. Розподільник (Mapper) — дозволяє встановити взаємодію між незалежними компонентами. Реєстр (Registry) — об'єкт, що відповідає за отримання загальних об'єктів чи сервісів. Плагін (Plugin) — дозволяє підставити значення для абстракції не під час компіляцію, а під час виконання програми. Набір записів (Record Set) — дозволяє представити дані із бази даних в аплікації. Заглушка сервісу (Service Stub) — дозволяє позбутись залежностей від зовнішніх компонентів.
Шаблони логіки домену
Група шаблонів, що надають ефекти способи для роботи із бізнес-логікою.
Сценарій транзакції (Transaction script) — пропонує реалізувати бізнес-логіку в межах однієї процедури. Модель предметної області (Domain model) — пропонує реалізувати бізнес-логіку, використовуючи підхід ООП. Обробник таблиці (Table Module) — пропонує об'єднати всю бізнес-логіку для усіх збережених даних в одному об'єкті. Патерн сервісного рівня (Service Layer) — пропонує описати бізнес-логіку незалежно від даних.
Шаблони сховища даних
Група шаблонів, що надають ефекти способи для роботи зі сховищем даних.
Активний запис (Active Record) — об'єкт включає функції CRUD, а також поля, що більш чи менш прямо відповідають полям відповідної таблиці в базі даних. Шлюз до даних таблиці (Table Data Gateway) — об'єкт діє як шлюз між даними додатку та таблицею сховища даних. Шлюз до даних запису (Row Data Gateway) — прошарок між доменним об'єктом та сховищем збереження даних. Відображення даних (Data Mapper) — призначений для зменшення взаємного впливу структури об'єкта та структури, яка реально зберігає дані об'єкта.
Шаблони об'єктно-реляційної поведінки
Група шаблонів, що надають способи підвищення ефективності роботи зі сховищем даних.
Одиниця роботи (Unit Of Work) — об'єкт відстежує зміни в даних сховища та здійснює транзакції. Мапа відповідності (Identity Map) — покращує продуктивність взаємодії зі сховище даних зберігаючи записи у кеші. Ліниве завантажування (Lazy Load) — покращує продуктивність шляхом завантаження даних, не одразу, а на вимогу.
Шаблони об'єктно-реляційного структурування
Група шаблонів, яка дозволяє ефективно описувати об'єкти сховища в аплікації.
Поле первинного ключа (Identity Field) — пропонує зберігати ідентифікатор запису бази даних в об'єкті для підтримки відповідності між об'єктом і записом. Розмітка зовнішніх ключів (Foreign Key Mapping) — пропонує відображати асоціації між таблицями у вигляді посилань між об'єктами. Розмітка зв'язків таблиць (Association Table Mapping) — пропонує відображати колекції об'єктів у вигляді проміжних таблиць з зовнішніми ключами. Відображення залежних об'єктів (Dependent Mapping) — пропонує помістити код для відображення залежної сутності у код відображення основної сутності. Об'єднане значення (Embedded Value) — пропонує представляти комплексні типи не у вигляді окремих таблиць, а за допомогою колонок основної сутності. Серіалізований великий об'єкт (Serialized LOB) — пропонує зберігати великий граф об'єктів в одному полі. Наслідування з однією таблицею (Single Table Inheritance) — пропонує зберігати ієрархію наслідування класів у вигляді однієї таблиці. Наслідування з таблицею для кожного класу (Class Table Inheritance) — пропонує зберігати ієрархію наслідування класів в окремих таблицях. Наслідування з таблицею для кожного конкретного класу (Concrete Table Inheritance) — пропонує зберігати ієрархію наслідування класів в окремих таблицях. Відображення із наслідуванням (Inheritance Mappers) — описую структуру класів відображення ієрархії наслідування. База даних звітності — спрощує роботу із даними аналітики.
Шаблони обробки об'єктно-реляційних метаданих
Група шаблонів, що дозволяє абстрагуватись від реалізації сховища даних.
Відображення на основі метаданих (Metadata Mapping) — пропонує не писати логіку відображення, а описати її метаданими. Об'єкт-запит (Query Object) — дозволяє приховати SQL за допомогою об'єктів. Сховище (Repository) — розділяє рівні джерела даних і логіки програми.
Шаблони вебпредставлення
Група шаблонів, для ефективного представлення даних із використанням вебсторінок.
Модель-вид-контролер (Model View Controller) — розділяє систему на компоненти відображення, модель даних та модель керування. Контролер сторінки (Page Controller) — пропонує створювати на кожну окрему сторінку окремий об'єкт обробник. Єдина точка входу (Front controller) — надає єдину точку входу для обробки усіх запитів. Контролер аплікації (Application Controller) — дозволяє керувати порядком роботи аплікації в залежності від стану. Шаблонізатор (Template View) — підставляє значення в HTML-сторінку замість маркерів. Перетворювач (Transform View) — пов'язує HTML-сторінку та дані. Двокрокова шаблонізація (Two Step View) — виконувати візуалізацію даних у два кроки: сформувати відображення моделі, після чого вставити її у шаблон.
Шаблони розподіленої обробки даних
Група шаблонів, для ефективної роботи із розподіленими системами.
Фасад (Remote Facade) — об'єднює групи підсистем під один уніфікований інтерфейс Об'єкт передачі даних (Data Transfer Object) — надає для передачі даних між підсистемами програми.
Шаблони локального конкурентного програмування
Група шаблонів, яка дозволяє ефективно опрацьовувати конкурентний доступ до ресурсів.
Оптимістичне блокування (Optimistic Offline Lock) — запобігає конфлікту між бізнес-транзакціями, що конкурують шляхом їх виявлення та відкату транзакції. Песимістичне блокування (Pessimistic Offline Lock) — запобігає конфлікту між бізнес-транзакціями, що конкурують надаючи доступ до даних в момент часу тільки одній транзакції. Блокування із низьким рівнем деталізації (Coarse Grained Lock) — пропонує блокувати групу об'єктів за допомогою єдиного елементу блокування. Неявне блокування (Implicit Lock) — дозволяє приховувати блокування та зробити його роботу неявною.
Шаблони збереження стану сеансу
Група шаблонів, що описують способи збереження сесії.
Збереження стану сеансу на стороні клієнта (Client Session State) — пропонує зберігати стан сеансу на стороні клієнта. Збереження стану сеансу на стороні сервера (Server Session State) — пропонує зберігати стан сеансу на стороні сервера. Збереження стану сеансу в базі даних (Database Session State) — пропонує зберігати стан сеансу в базі даних.
Джерела Catalog of Patterns of Enterprise Application Architecture Patterns of Enterprise Application Architecture