DDD: Nơi đặt trình xử lý sự kiện miền?


13

Bạn có thể cho tôi biết ý kiến ​​của bạn rằng lớp nào là lớp phù hợp để đặt các trình xử lý sự kiện miền trong DDD không? Ví dụ: tôi có dịch vụ ứng dụng để thêm hợp đồng mới và tôi muốn gửi thông báo qua email cho người liên hệ, khi hợp đồng đã được thêm, dịch vụ ứng dụng email (xử lý sự kiện ContractAdded) hoặc dịch vụ tên miền hoặc thứ gì khác?

Câu trả lời:


11

Tôi đặt xử lý sự kiện tên miền trong lớp ứng dụng.

Sự kiện miền là một cách để nói với các lớp bên ngoài (hoặc thế giới bên ngoài) rằng điều gì đó đã xảy ra trong lớp miền. Phải làm gì với sự kiện phụ thuộc vào ứng dụng. Ứng dụng có thể thông báo cho người dùng về những thay đổi hoặc có thể gọi một tên miền khác để làm điều gì đó. Ứng dụng chịu trách nhiệm phối hợp các hoạt động tên miền theo phản ứng về hành động của người dùng, yêu cầu web hoặc sự kiện tên miền.


1
+1 cho lớp ứng dụng. Trong thiết kế pub-sub, sự kiện miền có thể kích hoạt logic chung ở các vị trí / hệ thống / microsservice khác nhau. Nếu một trong những người đăng ký là một ứng dụng được mô hình hóa bằng DDD, sự kiện này sẽ kích hoạt một số xử lý trong ứng dụng đó / BC. Quá trình xử lý này có thể yêu cầu phân định giao dịch, kiểm soát truy cập, phối hợp thường được thực hiện ở lớp ứng dụng.
Paulo Merson

2

Cuốn sách DDD ban đầu (Evans 2004) giải thích lớp ứng dụng là một lớp mỏng thực hiện các đối tượng miền để đáp ứng với hành động của người dùng. Do đó, các trình xử lý sự kiện điển hình cho các sự kiện miền không thuộc về lớp ứng dụng.

Có thể có ý nghĩa khi đặt một số trong số chúng trong lớp miền, miễn là bạn không phá vỡ lớp bằng cách tạo ra một phụ thuộc đi lên.

Nếu bạn có lớp cơ sở hạ tầng nằm dưới lớp miền, trình xử lý sự kiện không thể ở đó vì nó sẽ phá vỡ lớp.

Nếu bạn có một lớp bộ điều hợp nằm trên lớp miền, bạn có thể tạo một trình xử lý sự kiện ở đó. Kiểm tra kiến trúc lục giác .


2

Tôi đặt Trình xử lý sự kiện miền trong lớp Miền làm giao diện miền IDomainEventHandler.

Một ví dụ về Trình xử lý sự kiện miền là một chính sách đăng ký một sự kiện tên miền nhất định để khởi tạo một giao dịch mới (ví dụ: để kích hoạt lệnh miền mới), do đó, có ý nghĩa khi có nó trong lớp Miền vì nó liên quan đến logic kinh doanh.

Chúng ta có thể nghĩ về một ví dụ nơi đơn hàng được xác nhận và do đó yêu cầu hóa đơn phải được tạo. Chúng tôi có một sự kiện OrderConfirmedEventđã xảy ra. Một chính sách trong miền của chúng tôi sẽ chịu trách nhiệm đăng ký sự kiện này và tạo một lệnh miền RequestInvoicesẽ được xử lý bởi trình xử lý lệnh và xử lý theo đó.

Nếu chúng ta có trình xử lý sự kiện này trong lớp ứng dụng, điều đó có nghĩa là lớp ứng dụng, ngoài việc phối hợp các hành động của người dùng, sẽ thực thi một số logic nghiệp vụ, có vẻ không chính xác.

Tuy nhiên chúng tôi có

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.