Tôi có một hệ thống nơi người dùng trả lời câu hỏi trong biểu mẫu. Tôi có các đối tượng đại diện cho mô hình này nhưng tôi không hoàn toàn chắc chắn làm thế nào để tổ chức các đối tượng này về DDD.Là tổng hợp gốc với phân cấp sâu thích hợp trong DDD?
- Biểu mẫu (có danh sách riêng) Phần;
- Phần -> (có danh sách riêng) Nhóm;
- Nhóm -> (có danh sách riêng) Câu hỏi;
- Câu hỏi -> (có thể có danh sách câu hỏi phụ riêng) Câu hỏi;
- Câu hỏi -> (có danh sách riêng) Các câu trả lời;
- Trả lời -> (có danh sách riêng) Answer_Details;
- Answer_Detail -> (có thể có danh sách chi tiết phụ riêng) Sub_Answer_Details.
Mỗi đối tượng có hơn 15 thuộc tính và mỗi đối tượng không có ý nghĩa nếu không có cha mẹ. Theo DDD, tôi tin rằng thực thể Form nên là một gốc tổng hợp và tất cả các đối tượng khác nên là đối tượng giá trị. Điều đó có nghĩa là tôi chỉ cần một Kho lưu trữ cho thực thể Biểu mẫu. Trong trường hợp này FormRepository sẽ được lộn xộn với tất cả các loại phương pháp CRUD cho các đối tượng con. Quyền lý luận của tôi có phải là DDD không? Liệu có ổn không khi tôi kết thúc với một tập hợp rất rộng lớn? Tôi tin rằng đại diện như vậy có thể dễ dàng dẫn đến các vấn đề hiệu suất.
Chỉ cần đọc gần đây [Thiết kế tổng hợp hiệu quả] (https://vaughnvernon.co/?p=139), nơi các tập hợp nhỏ được đề xuất. Có thể có các vấn đề về hiệu năng với một tập hợp lớn chứa một tập hợp các thực thể con với hàng nghìn mục, vì việc thêm một mục vào bộ sưu tập sẽ lấy toàn bộ bộ sưu tập (ví dụ nhibernate hoạt động như thế này) – xhafan
Cố định liên kết đến [Thiết kế tổng hợp hiệu quả] (http://dddcommunity.org/library/vernon_2011) – xhafan
Nó phụ thuộc vào nhiều yếu tố. Sẽ có những sửa đổi đồng thời của cùng một hình thức?Nếu câu trả lời là có thì bạn không nên tạo một tập hợp cụm lớn hơn. Ngoài ra, trường hợp sử dụng của bạn là rất CRUD vì vậy từ quan điểm giao diện người dùng của bạn, tôi đoán bạn chỉ trình bày tất cả các trường có thể chỉnh sửa cho toàn bộ biểu mẫu và lưu nó dưới dạng toàn bộ tài liệu. Tuy nhiên, nếu giao diện người dùng của bạn được tách biệt hơn một chút (ví dụ: cho phép chỉnh sửa một nhóm tại một thời điểm hoặc một phần, v.v. thì bạn sẽ được hưởng lợi từ việc có nhiều AR). – plalx