ADM - хороший зразок для вирішення розподілених сервісів таких мікросервісів. Він підходить для багатьох сучасних бізнес-кейсів.
Подумайте, чи є у нас об’єкт Order Order. За допомогою підходу OOP ми додамо Order.Purchase () Order.Cancel () і т.д.
Але якщо у нас є розподілена система, з програмами, які просто одне, тобто доступ до списку замовлень і придбання кожного по черзі, або отримання списку замовлень і скасування кожного по черзі, то якщо обидва Методи на одному об'єкті не робить сенс. Ми повинні мати два домени або обмежені контексти:
PurchaseSystemOrder.Purchase()
і
CancelSystemOrder.Cancel();
Єдине, чим би поділилися ці об'єкти, - це структура даних властивостей.
Коли ви додаєте все більше мікросервісів, ви отримуєте десятки типів замовлення. Він більше не має сенсу говорити про ордена в якості об'єкта домену, незважаючи на те, його ж концептуальному порядку , який обробляється усіма цими системами.
Має більше сенсу мати анемічну модель «Замовлення», яка просто інкапсулює лише дані та відповідно перейменовує ваші послуги:
PurchaseService.Purchase(Order order)
Тепер ми можемо поговорити про замовлення ще раз, і ми можемо додавати будь-які нові послуги, які ми придумаємо для обробки, не впливаючи на інші розгорнуті в даний час послуги.
Фаулер і Ко походять з монолітної системи, у їхньому світі підхід ADM означатиме єдину програму, в якій всі ці окремі сервіси створені в пам'яті, і OrderDTO передається навколо і мутується. Це було б набагато гірше, ніж розміщення методів на багатої моделі замовлення.
Але в розподіленій системі є багато програм, кожна з яких вимагає лише одного методу замовлення та виконує його на декількох замовленнях, завантажуючи кожне, запускаючи метод і потім відкидаючи його. Для цього потрібна лише одна Служба та потік об'єктів даних.
Повноцінно використовувати насичену модель, турбуватися про вимоги та залежності всіх Методів лише для виклику однієї, а потім відкидання об'єкта майже одразу безглуздо.
Плюс до зміни одного з методів вимагатиме оновлення всіх розподілених компонентів, оскільки всі вони залежать від моделі Rich за своєю логікою.
У моїх кодових базах немає місця для речей, які їм не потрібні