ADM은 마이크로 서비스와 같은 분산 서비스 솔루션에 적합한 패턴입니다. 오늘날의 많은 웹 기반 비즈니스 사례에 적합합니다.
주문 도메인 오브젝트가 있는지 고려하십시오. OOP 방식을 사용하면 Order.Purchase () Order.Cancel () 등을 추가 할 수 있습니다. 데스크톱 앱에서는 주문을 메모리에 보관하고 동일한 인스턴스에 여러 작업을 수행하는 데스크톱 앱에서 잘 작동합니다.
그러나 우리가 분산 시스템을 가지고 있다면, 하나의 일, 즉 주문 목록에 액세스하고 차례로 주문을 구매하거나, 주문 목록을 가져 와서 각각 취소하고 동일한 객체에 두 메소드를 갖는 것이 감각. 두 개의 도메인 또는 경계 컨텍스트가 있어야합니다.
PurchaseSystemOrder.Purchase()
과
CancelSystemOrder.Cancel();
이 객체가 공유 할 수있는 유일한 것은 속성의 데이터 구조입니다.
점점 더 많은 마이크로 서비스를 추가함에 따라 수십 가지 유형의 주문이 발생합니다. 이러한 모든 시스템에서 처리되는 것과 동일한 개념적 순서이지만 더 이상 도메인 오브젝트로 주문 에 대해 이야기하는 것은 이치에 맞지 않습니다 .
데이터 만 캡슐화하고 그에 따라 서비스 이름을 바꾸는 Anemic 모델 Order를 사용하는 것이 훨씬 더 합리적입니다.
PurchaseService.Purchase(Order order)
이제 Order에 대해 다시 이야기하고 현재 배치 된 다른 서비스에 영향을주지 않고 처리 할 새로운 서비스를 추가 할 수 있습니다.
Fowler와 Co는 단일체 시스템 배경에서 비롯되었으며, ADM 접근 방식은 메모리에서 인스턴스화되고 OrderDTO가 전달되고 변경되는 모든 개별 서비스가 포함 된 단일 앱을 의미합니다. 이 방법을 풍부한 주문 모델에 적용하는 것보다 훨씬 나쁩니다.
그러나 분산 시스템에는 많은 프로그램이 있으며 각 프로그램에는 단일 주문 메소드 만 필요하며 여러 주문에서 실행하여 각각로드하여 메소드를 실행 한 다음 버립니다. 단일 서비스와 데이터 개체 스트림 만 필요합니다.
하나의 모델 만 호출 한 다음 거의 즉시 객체를 폐기하기 위해 모든 메소드의 요구 사항 및 종속성에 대해 걱정하면서 풍부한 모델을 완전히 채 웁니다.
또한 단일 방법 중 하나를 변경하려면 논리의 리치 모델에 따라 모든 분산 구성 요소를 업데이트해야합니다.
코드베이스에 필요없는 것들을 넣을 공간이 없습니다.