Tôi đang cố gắng tìm ra cách tốt nhất để xây dựng một kiến trúc dễ kiểm tra và có thể kiểm chứng. Đã trải qua một số dự án, tôi đã nhìn thấy một số kiến trúc khá xấu và tôi muốn tránh những sai lầm trong tương lai trên các dự án của riêng mình.Nơi đặt logic nghiệp vụ trong DDD
Giả sử tôi đang xây dựng một ứng dụng ba lớp khá phức tạp và tôi muốn sử dụng DDD. Câu hỏi của tôi là, tôi nên đặt logic kinh doanh của mình ở đâu? Một số người nói rằng nó nên được đặt trong các dịch vụ (lớp dịch vụ) và điều đó có ý nghĩa. Có một số dịch vụ tuân thủ Nguyên tắc về trách nhiệm duy nhất có ý nghĩa.
Tuy nhiên, một số người cho rằng đây là mô hình chống và logic kinh doanh không nên được triển khai trong lớp dịch vụ. Tại sao điều này?
Giả sử chúng tôi có IAuthenticationService
có phương thức có chữ ký bool UsernameAvailable(string username)
. Phương thức này sẽ thực hiện tất cả các yêu cầu logic để kiểm tra xem tên người dùng có sẵn hay không.
Vấn đề ở đây theo đám đông "đây là một phản ứng" là gì?
Tôi vừa tìm thấy một bài viết MSDN có nội dung: "Một lớp dịch vụ nằm trên đầu mô hình miền của ứng dụng và cung cấp một tập hợp các hoạt động có thể được thực hiện dựa trên nó. ứng dụng của bạn nhưng có thể không nhất thiết thuộc về bên trong mô hình miền — logic có thể có khả năng bị rò rỉ vào các phương thức của bộ điều khiển. " ...... Tôi đoán đây là những gì bạn đã viết, trong một từ ngữ khác nhau. Tuy nhiên, làm thế nào bạn sẽ xác định những gì thuộc về bên trong mô hình miền và những gì không? – Vex
@Vex: mọi người có ý nghĩa rất nhiều thứ khác nhau bởi 'lớp dịch vụ', nhưng bạn không thể đi sai nếu bạn cố gắng đặt tất cả ** logic nghiệp vụ ** vào mô hình miền của mình. (Trái với ** logic ứng dụng ** - xem [câu trả lời này] (http://stackoverflow.com/questions/2475136/how-useful-is-a-pure-mvc-implementation/2479207#2479207) để biết thêm về sự phân biệt đó.) –