ADM là một mô hình tốt cho một giải pháp dịch vụ phân tán như một dịch vụ siêu nhỏ. Nó phù hợp với nhiều trường hợp kinh doanh dựa trên web ngày nay.
Hãy xem xét nếu chúng ta có một đối tượng Miền Đặt hàng. Với cách tiếp cận OOP, chúng tôi sẽ thêm Order.Purchase () Order.Cattery (), v.v. Nó sẽ hoạt động tốt trong một ứng dụng máy tính để bàn, nơi chúng tôi giữ các đơn hàng trong bộ nhớ và thực hiện nhiều việc cho cùng một ví dụ.
Nhưng nếu chúng ta có một hệ thống phân tán, với các chương trình chỉ cần một thứ, tức là truy cập vào danh sách các đơn hàng và lần lượt mua từng đơn hàng, hoặc nhận danh sách các đơn hàng và hủy từng đơn hàng thì cả hai Phương thức trên cùng một đối tượng sẽ không giác quan. Chúng ta sẽ phải có hai Tên miền hoặc Bối cảnh:
PurchaseSystemOrder.Purchase()
và
CancelSystemOrder.Cancel();
Điều duy nhất mà các đối tượng này chia sẻ sẽ là cấu trúc dữ liệu của các thuộc tính.
Khi bạn thêm ngày càng nhiều microservice, bạn sẽ có hàng tá loại Đặt hàng. Sẽ không còn ý nghĩa khi nói về một Đơn hàng là một đối tượng Miền, mặc dù cùng một thứ tự khái niệm đang được xử lý bởi tất cả các hệ thống này.
Điều có ý nghĩa hơn nhiều khi có một mô hình Thiếu máu, Đơn hàng, chỉ gói gọn dữ liệu và đổi tên dịch vụ của bạn theo đó:
PurchaseService.Purchase(Order order)
Bây giờ chúng tôi có thể nói về Đặt hàng một lần nữa và chúng tôi có thể thêm bất kỳ dịch vụ mới nào chúng tôi nghĩ ra để xử lý, mà không ảnh hưởng đến các dịch vụ hiện đang triển khai khác.
Fowler và Co đến từ nền tảng hệ thống nguyên khối, trong thế giới của họ, cách tiếp cận ADM có nghĩa là một ứng dụng duy nhất với tất cả các dịch vụ riêng biệt này được khởi tạo trong bộ nhớ và OrderDTO được truyền qua và biến đổi. Điều này sẽ tồi tệ hơn nhiều so với việc đưa các phương thức lên một mô hình Đơn hàng phong phú.
Nhưng trong một hệ thống phân tán, có nhiều chương trình, mỗi chương trình chỉ yêu cầu một phương thức Đơn hàng duy nhất và chạy nó trên nhiều đơn hàng, tải từng đơn hàng, chạy phương thức và sau đó loại bỏ nó. Nó chỉ yêu cầu một Dịch vụ duy nhất và một luồng các đối tượng dữ liệu.
Xây dựng một mô hình phong phú đầy đủ, lo lắng về các yêu cầu và sự phụ thuộc của tất cả các Phương thức chỉ để gọi một mô hình duy nhất và sau đó loại bỏ đối tượng gần như ngay lập tức là vô nghĩa.
Cộng với một thay đổi đối với một trong những phương thức sẽ yêu cầu cập nhật tất cả các thành phần phân tán vì tất cả chúng đều phụ thuộc vào Mô hình phong phú cho logic của chúng.
Tôi không có chỗ trong (các) cơ sở mã của mình cho những thứ họ không cần