ADM jest dobrym wzorcem dla rozwiązania usług rozproszonych, takich jak mikrousługi. Pasuje do wielu współczesnych biznesowych przypadków internetowych.
Zastanów się, czy mamy obiekt Domeny zamówienia. Dzięki podejściu OOP dodalibyśmy Order.Purchase () Order.Cancel () itp. Działałoby to dobrze w aplikacji komputerowej, w której przechowujemy zamówienia w pamięci i robimy wiele rzeczy w tym samym wystąpieniu.
Ale jeśli mamy system rozproszony, z programami, które tylko do jednej rzeczy, tj. Uzyskują dostęp do listy zamówień i kupują je kolejno, lub uzyskują listę zamówień i anulują je kolejno, to posiadanie obu metod na tym samym obiekcie nie powoduje sens. Musielibyśmy mieć dwie Domeny lub Ograniczone Konteksty:
PurchaseSystemOrder.Purchase()
i
CancelSystemOrder.Cancel();
Jedyne, co te obiekty mogłyby dzielić, to struktura danych właściwości.
Gdy dodajesz coraz więcej mikrousług, powstaje dziesiątki rodzajów zamówień. To już nie ma sens mówić o na zamówienie jako obiektu domeny, choć jej tym samym porządku pojęciowego, który jest przetwarzany przez wszystkich tych systemów.
O wiele bardziej sensowne jest posiadanie modelu anemicznego, Order, który zawiera tylko dane i odpowiednio zmienia nazwę usług:
PurchaseService.Purchase(Order order)
Teraz możemy porozmawiać o Zamówieniu i możemy dodać dowolne nowe usługi, które wymyślimy, aby przetworzyć, bez wpływu na inne obecnie wdrażane usługi.
Fowler i Co wywodzą się z systemu monolitycznego, w ich świecie podejście ADM oznaczałoby pojedynczą aplikację z wszystkimi tymi oddzielnymi usługami utworzonymi w pamięci, a OrderDTO było przekazywane i mutowane. Byłoby to znacznie gorsze niż nałożenie metod na bogaty model Zakonu.
Ale w systemie rozproszonym istnieje wiele programów, z których każdy wymaga tylko jednej metody Zamówienia i uruchamia ją na wielu zamówieniach, ładując każdy z nich, uruchamiając metodę, a następnie odrzucając ją. Wymaga tylko jednej usługi i strumienia obiektów danych.
Pełne wypełnienie bogatego modelu, obawianie się o wymagania i zależności wszystkich Metod tylko wywołania jednego, a następnie niemal natychmiastowego odrzucenia obiektu jest bezcelowe.
Ponadto zmiana jednej z metod wymagałaby aktualizacji wszystkich komponentów rozproszonych, ponieważ wszystkie one zależą od modelu zaawansowanego pod względem logiki.
W mojej bazie danych nie ma miejsca na rzeczy, których nie potrzebują