Архітектура корпоративних програмних додатків
Ця стаття не має шаблону-картки. Можливо, потрібен шаблон {{картка книги}}. |
Архітектура корпоративних програмних додатків |
Архітектура корпоративних програмних додатків (англ. Patterns of Enterprise Application Architecture) — книга написана Мартіном Фаулером, яка описує шаблони проєктування, необхідні при розробці корпоративних додатків.
Шаблони у книзі поділені на декілька груп.
Група шаблонів, які описують базові проблеми.
- Об'єкт-значення (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 [Архівовано 12 листопада 2020 у Wayback Machine.]
- Patterns of Enterprise Application Architecture [Архівовано 28 березня 2014 у Wayback Machine.]