vì vậy không thể chuyển sang ORM khác (không phải chúng tôi muốn)).
Điều đó có vẻ sai. Một lợi thế lớn của mẫu kho lưu trữ là bạn ẩn logic truy cập dữ liệu và nó có thể dễ dàng trao đổi.
Cho đến giờ tôi cảm thấy như thể đưa logic kinh doanh của mình vào mô hình miền của mình và thông qua các kho lưu trữ, tôi sẽ làm việc với ORM (mà tôi đã chọn). Tuy nhiên, nếu tôi muốn tiếp tục sử dụng công cụ MDA cho phần ORM của ứng dụng, mô hình được tạo ở đây sẽ rất thiếu máu (tức là không chứa bất kỳ logic nghiệp vụ nào). Tương tự nếu tôi sử dụng khung Entity (.net) hoặc NHibernate cho ORM của mình thì đó cũng là một mô hình thiếu máu.? Tôi không chắc chắn nơi bạn sẽ đặt logic kinh doanh nếu tôi chỉ sử dụng NHibernate.
Một mô hình miền thiếu máu được coi là một thực tiễn xấu của nhiều người, ví dụ như Martin Fowler. Bạn nên tránh một thiết kế như vậy bởi vì một mô hình như vậy dẫn đến các kỹ thuật thiết kế theo thủ tục hơn là một thiết kế hướng đối tượng tốt. Sau đó, bạn có các lớp dữ liệu và các lớp quản lý / xử lý có nghĩa là bạn tách biệt trạng thái và hành vi. Nhưng một đối tượng thực sự nên là "trạng thái và hành vi".
NHibernate làm một công việc tuyệt vời ở sự thiếu hiểu biết dai dẳng. Bạn có thể ẩn đi các chi tiết ánh xạ trong XML hoặc với FluentNHibernate và chỉ cần viết các POCO đơn giản. Thật dễ dàng để tạo một mô hình miền phong phú với NHibernate. Tôi nghĩ bạn cũng có thể làm điều đó với khung thực thể và công cụ MDA. Miễn là công cụ này tạo ra các lớp một phần, bạn có thể mở rộng mã được tạo ra khá dễ dàng mà không phải lo lắng rằng một thế hệ mới có thể phá hủy mã do người dùng viết của bạn.
Để cắt ngắn câu chuyện dài này. Khi bạn sử dụng NHibernate, không có gì, tôi không lặp lại điều gì , ngăn bạn nắm lấy một mô hình miền phong phú. Tôi khuyên bạn nên sử dụng nó với FluentNHibernate và lập bản đồ bằng tay. Mã bản đồ chỉ mất 5 đến 10 phút để viết. Tôi cho rằng điều tương tự cũng đúng với khung thực thể và các công cụ của nó ít nhất tạo ra các lớp một phần có thể dễ dàng mở rộng.
Tôi có đúng không khi nghĩ theo cách này, nói cách khác với DDD tất cả logic kinh doanh trong miền và chỉ sử dụng ORM để duy trì thông qua các kho lưu trữ?
Đối với hầu hết các phần bạn là chính xác. Bạn nên có một mô hình miền phong phú. Đặc biệt là khi mọi thứ trở nên ngày càng phức tạp, việc bảo trì và mở rộng sẽ dễ dàng hơn khi bạn thiết kế đúng cách. Nhưng hãy nhớ rằng DDD cũng biết Dịch vụ (Lớp miền và Lớp ứng dụng) để triển khai logic kinh doanh và các nhà máy để đóng gói logic sáng tạo.
Tôi cũng có xu hướng phân biệt logic kinh doanh thành logic miền và logic kinh doanh ứng dụng thực tế. Logic miền là cách miền tương tác và hoạt động trong khi logic ứng dụng, là một lớp hoàn toàn khác, gói gọn cách thức miền được sử dụng cho trường hợp sử dụng / ứng dụng cụ thể. Thường thì tôi phải cập nhật mô hình miền để hỗ trợ các trường hợp sử dụng cụ thể và để làm cho nó mạnh hơn.