5

Tôi đang so sánh khả năng sử dụng dịch vụ (theo nghĩa của một thành phần cục bộ quá trình như trong thùng chứa Windsor IoC) từ mô hình miền.Quy tắc truy cập dịch vụ từ các đối tượng miền

Tôi có 3 cách để đạt được điều này:

  1. Xuất bản một sự kiện tên miền và có mã lớp dịch vụ xử lý nó

  2. Tiêm dịch vụ thông qua một phương pháp trên đối tượng mô hình

  3. Tiêm dịch vụ vào đối tượng mô hình

(4. Sử dụng một Service Locator)

Đầu tiên dẫn đến một mô hình rất biểu cảm và lặp lại, tạo ra các sự kiện miền và xử lý theo kiểu thủ tục cho các tác vụ đơn giản khác. Nhưng nó có sự tách rời tốt nhất của mô hình từ môi trường nó được sử dụng bên trong (mô hình được tự xác định).

Phương thức thứ hai làm cho các đối số dài hơn và có vẻ như nó phá vỡ đóng gói (nếu hành động của đối tượng mô hình yêu cầu các dịch vụ khác, tất cả người gọi phải thay đổi).

Thứ ba sẽ tiêm Phụ thuộc không bắt buộc đối với Giao dịch hiện tại. Ngoài ra một trong những nhu cầu "mở rộng" NHibernate cho việc này. Tôi sẽ tránh phương pháp này do các khuyến nghị khác đọc.

Vì tôi muốn viết điều này trong tài liệu của mình, tôi cần thông báo cho người đọc biết khi nào nên sử dụng phương pháp nào. Tôi đang nghĩ một cái gì đó dọc theo dòng "Sử dụng phương pháp tiêm nếu bạn sẽ đưa bộ xử lý sự kiện miền vào lắp ráp mô hình", nhưng nó không thực sự nhấn điểm.

Đề xuất cho quy tắc này?

Trả lời

8

Nếu AR (tổng hợp gốc) cần một số dữ liệu từ một dịch vụ, dữ liệu đó nên được thực hiện như một phụ thuộc (KHÔNG phải là dịch vụ). Về cơ bản, AR sẽ không biết gì về dịch vụ cả.

Nếu một số phương pháp thực sự có một depednency rằng sẽ không có ý nghĩa để được tiêm trong constructor, vượt qua nó như là đối số phương pháp. Tôi không nghĩ rằng bạn nên vượt qua các dịch vụ mặc dù (nhưng nó phụ thuộc), vượt qua trực tiếp các dữ liệu cần thiết.

Nếu AR thực hiện điều gì đó sẽ yêu cầu dịch vụ cập nhật nội dung, tôi cho rằng thông điệp được thúc đẩy là cách để thực hiện (tạo sự kiện).

Giới thiệu về NHibernate hoặc các chi tiết khác, AR không cần biết về chúng. NẾU nó không phải là một khái niệm miền, hãy giữ nó khỏi AR.

Cá nhân, tôi cố gắng lập mô hình AR để không cần dịch vụ. Nó nhiều AR được tham gia vào một kịch bản, tôi sẽ sử dụng các sự kiện miền với một xe buýt dịch vụ đáng tin cậy. Điều này có nghĩa là bất kỳ giao dịch db nào nằm ngoài câu hỏi. Tôi chỉ giữ những thứ giao dịch trong AR, chính xác hơn trong kho lưu trữ AR, cho mọi thứ khác có sự nhất quán cuối cùng.

+0

Câu trả lời rất hay (đặc biệt là điểm có dữ liệu đáng chú ý). Tôi sẽ thực hiện quy tắc: "Sử dụng các sự kiện miền". Mặc dù tôi tìm thấy nó khá thủ tục và lặp đi lặp lại cho việc sử dụng các dịch vụ được "khái niệm miền", nó là một quy tắc với các vấn đề ít nhất. – sanosdole