Tôi đang có lần thử đầu tiên tại DDD và đang gặp sự cố với thiết kế tổng hợp.DDD - Thực thi bất biến với các rễ nhỏ tổng hợp
Ứng dụng của tôi chứa 3 Thực thể; Biểu đồ, Nút, Liên kết. Mỗi thực thể này có một thuộc tính tên có thể được sửa đổi bởi người dùng (mà tôi tin rằng làm cho 'tên' không phù hợp như là một id thực thể). Một biểu đồ chứa một tập hợp các nút và nút có một bộ sưu tập các liên kết đi (cho mục đích của vấn đề này là an toàn để bỏ qua các liên kết đến). Mỗi nút chỉ có thể được liên kết với một đồ thị tại một thời điểm (nhưng có thể di chuyển giữa các đồ thị) và tương tự, mỗi liên kết chỉ có thể được liên kết với một nút tại bất kỳ thời điểm nào (nhưng có thể được di chuyển).
(Các) bất biến mà tôi đang cố thực thi là tất cả các tên Thực thể là duy nhất trong bộ sưu tập gốc của chúng. Với kiến trúc được mô tả ở trên, bất biến là trên các bộ sưu tập thực tế, vì vậy tôi đã quyết định rằng các chủ sở hữu bộ sưu tập (Graph và Node) cả hai nên là Tổng hợp Roots.
Vấn đề tôi có là làm cách nào để bây giờ tôi thực thi tên bất biến trên nút? Về Liên kết, nó rất dễ dàng vì nó được ẩn đi bên trong nút AR và như vậy nút có thể xác nhận rằng tất cả các liên kết đổi tên/di chuyển không phá vỡ bất biến này. Nhưng theo như tôi thấy, không có gì để ngăn chặn việc đổi tên trực tiếp của Node mà có thể phá vỡ bất biến. Sự nhất quán cuối cùng không phải là một lựa chọn chấp nhận được ở đây, đây phải là một sự bất biến của hệ thống thực sự.
Cách tiếp cận tôi đang xem xét là có Node.Rename() thực sự thực thi bất biến, nhưng mối quan tâm của tôi là điều này liên quan đến việc tìm kiếm bên trong biểu đồ chính để kiểm tra xem việc đổi tên có hợp lệ hay không. Điều này không 'cảm thấy' đúng - nó cảm thấy như đồ thị nên là một trong những thực thi ràng buộc này không gian tên và rằng Node nên biết gì về nó cả.
Tôi hy vọng điều này có ý nghĩa và tôi mong muốn được nghe suy nghĩ của mọi người.
Chỉnh sửa: Mô hình miền được trình bày ở trên là một tập hợp con được đơn giản hóa của toàn bộ miền. Quá phức tạp đối với tất cả các thực thể được tổ chức trong một AR duy nhất .......
"có vẻ như Biểu đồ phải là một trong những thực thi ràng buộc về không gian tên này và Nút đó không biết gì về nó cả." - bingo! – MattDavey
@MattDavey - Vậy bạn có gợi ý AR duy nhất nên là Biểu đồ không? Tôi không thấy làm thế nào khác tôi có thể thực thi rằng tất cả các đổi tên Node nên đi qua đồ thị cha mẹ. Nếu đây là trường hợp, tôi lo rằng tôi sẽ kết thúc với một AR khổng lồ 'thần' - tương tự như những nỗ lực đầu tiên trong [bài luận Vaughan] (http://dddcommunity.org/wp-content/uploads/files/pdf_articles /Vernon_2011_1.pdf) – tonyj444
Nếu đó là một sự bất biến của hệ thống thực, việc giữ cho 'Đồ thị' là một AR có vẻ là con đường để đi. Nếu bạn sử dụng 'Đồ thị' làm AR duy nhất, thì nó có thể phát triển bao nhiêu và bạn dự kiến sẽ có bao nhiêu đồng thời? – JefClaes