9

Tôi đang cố gắng sử dụng mẫu Kho lưu trữ cho dự án hiện tại của mình và hiện tôi đang trong quá trình cố gắng tạo mô hình miền và tìm gốc tổng hợp.Rễ tổng hợp. Lỗ thỏ bao xa như thế nào

Tôi đã đọc quy tắc 'Cascading Delete', tuyên bố rằng nếu không xóa được thành viên khi gốc bị xóa thì nó không phải là một phần của thư mục gốc.

tôi sẽ sử dụng một sự cố Cảnh sát như một eample: -

Incident (root tổng hợp) - Điều này có thể chứa điều tra cán bộ, ghi chú của mỗi cán bộ. Nó cũng có thể chứa các nghi phạm với một danh sách các ngày đã được phỏng vấn. Cảnh quay CCTV có thu được cho sự cố không? Một bản ghi của mỗi lần CCTV được xem và bởi ai? Bản sao của CCTV cho bằng chứng/tòa án, vv

Có vẻ như IncidentAggregate có thể trở nên rất lớn vì dường như mọi thứ đều bị treo trên sự cố đó.

Câu hỏi của tôi là gấp đôi, tổng số gốc nên quản lý và, rễ cây trong rễ có phải là một ý tưởng hay không?

Đây có thể không phải là một ví dụ đặc biệt tốt vì bạn có thể không bao giờ xóa nội dung nào đó như sự cố của cảnh sát nhưng tôi hy vọng nó mô tả câu hỏi của tôi tốt hơn.

Trả lời

10

Tổng hợp thường chứa tài liệu tham khảo cho các gốc tổng hợp khác. Các tham chiếu này sẽ bị xóa khi tổng hợp chứa bị xóa, nhưng tổng hợp chúng sẽ trỏ đến.

Để sử dụng sự tương tự của bạn. Một báo cáo mà chúng tôi giả định là một phần của tổng hợp chỉ một sự cố và sẽ bị xóa cùng với tổng hợp. Không có tổng hợp nào khác sẽ truy cập trực tiếp vào các báo cáo này.

Tuy nhiên, tổng hợp sự cố sẽ tham chiếu tập hợp đại diện cho cán bộ, nghi phạm và mục nhật ký xem CCTV.

9

Tổng hợp là một nhóm đối tượng có cùng vòng đời.

Nếu bạn đã xóa sự cố, bạn cũng muốn xóa nhân viên điều tra không? Không - nếu bạn không sớm rời khỏi cảnh sát. Các cán bộ điều tra không phải là trong tổng hợp sự cố.

Trong số những thứ khác mà bạn liệt kê, nghi ngờ, phỏng vấn, CCTV, vv Câu trả lời là - nó phụ thuộc.

Điều đó tùy thuộc vào miền sự cố của bạn. Hệ thống của bạn đang làm gì? phạm vi của nó là gì? vấn đề là gì?

Nếu chỉ công việc là theo dõi một chuỗi sự cố và giả định nghi phạm, phỏng vấn và CCTV chỉ có trong hệ thống là kết quả của một sự cố, thì có, có tất cả trong một tổng hợp có thể phù hợp. Nếu vụ việc bị xóa, các nghi phạm, phỏng vấn và CCTV có thể xảy ra.

Nếu, ví dụ: bạn cũng theo dõi lưu trữ cảnh quay CCTV được thu thập từ mạng lưới camera trung tâm thành phố. Có lẽ bạn đang cố gắng theo dõi hiệu quả và độ tin cậy của họ. Nếu bạn cần xử lý cảnh quay CCTV khác nhau. Nó sẽ ở trong một tập hợp khác với vòng đời của chính nó. Nếu bạn xóa một sự cố, bạn vẫn muốn giữ cảnh quay CCTV của mình để biết các sự cố và chỉ số hiệu suất khác.

Điều gì trong và ngoài tổng hợp phụ thuộc vào miền sự cố của bạn. Hoặc chính xác hơn, nó phụ thuộc vào cách bạn đã lập mô hình giải pháp miền vấn đề.

Hãy suy nghĩ vòng đời.

1

"Gốc rễ trong rễ có phải là một ý tưởng hay không?"

Câu trả lời ngắn gọn trong quan điểm của tôi là không. Như Kurt nói, bạn nên giữ tài liệu tham khảo cho các tập hợp khác. Chỉ cần được rõ ràng, bằng cách tham khảo tôi có nghĩa là xác định các đối tượng. Vì vậy, có lẽ tổng Incident của bạn sẽ có một tài sản như

public IEnumerable<Guid> InvestigatingOfficerIds 
{ 
    get { return _investigatingOfficerIds.AsReadOnly(); } 
} 

Hoặc

public IEnumerable<OfficerReference> InvestigatingOfficerIds 
{ 
    get { return _investigatingOfficerIds.AsReadOnly(); } 
} 

Nhờ đó mà OfficeReference là một lớp đại diện cho giá trị của một bản sắc cán (dưới mui xe có lẽ sẽ là một Guid).

Nếu logic miền của bạn cần thực hiện các hành động sử dụng cả sự cố và cán bộ điều tra, bạn sẽ trừu tượng logic này thành dịch vụ miền và sử dụng IOfficerRepository để tìm nhân viên tổng hợp bằng ID được cung cấp trên tổng hợp sự cố.

Các vấn đề liên quan