2010-02-05 62 views
14

Tôi chỉ mới bắt đầu trong DDD và tôi đang gặp một số khó khăn trong việc tìm hiểu cách thức phù hợp với tính chất quan hệ của dữ liệu của tôi. Tôi có những gì tôi tin rằng sẽ được coi là gốc tổng hợp của tôi, nhưng tổng hợp cũng có một tổng hợp của riêng mình. Không muốn vi phạm Luật Demeter, tôi tự hỏi nếu tôi đang suy nghĩ về điều này sai và hy vọng rằng một số chuyên gia DDD có thể cung cấp một số cái nhìn sâu sắc.Xử lý các tập hợp lồng nhau trong DDD

Gốc tổng hợp của tôi là đối tượng Account, trong đó có tổng số nhiều thực thể AccountElement, là các nhóm hợp lý của các thực thể ProductComponent riêng lẻ.

Một AccountElement bên ngoài bối cảnh của một Account không có ý nghĩa, vì vậy tôi cảm thấy thoải mái với kết luận của tôi rằng đối tượng Account là gốc tổng hợp của tôi, và tôi dự đoán rằng thực thể có một tổng Elements tài sản. Đó là bộ sưu tập ProductComponent khiến tôi bối rối. Tổng hợp này không có ý nghĩa bên ngoài một số AccountElementthực sự là không có nghĩa gì ngoài số Account.

Tôi không nghĩ rằng tôi nên được truy cập cá nhân ProductComponent đối tượng bằng cách nằm rải rác cách của tôi với nó, như:

var reference = account.Elements(0).ProductComponents(0).ReferenceCode; 

Nhưng đồng thời nó không có ý nghĩa (từ góc độ miền) để truy cập trực tiếp ProductComponent từ một thực thể Account.

Tôi chắc rằng điều này hơi khó hiểu một chút nếu không có kiến ​​thức về miền của tôi, nhưng tôi hy vọng nó đủ để có được một số phản hồi tốt.

+3

Nếu bạn yêu cầu mức độ làm tổ đối tượng này để làm cho mô hình đối tượng của bạn hoạt động, thì tôi sẽ không lo lắng quá nhiều về Luật Demeter. Xem http://haacked.com/archive/2009/07/14/law-of-demeter-dot-counting.aspx –

+0

Xem thêm http://www.dcmanges.com/blog/37 –

+1

Cảm ơn, bài viết của Phil là hữu ích, và câu hỏi về cách liên quan chặt chẽ đến trẻ em của các trẻ em là gốc tổng hợp thực sự là chìa khóa ở đây. Nhìn vào đó, nó chỉ có ý nghĩa để làm tổ các thực thể. Tôi thấy thoải mái hơn điều này là chính xác vì sau khi đưa ra quyết định này, hướng của mã dường như trực quan hơn rất nhiều. Hoặc theo tinh thần của DDD, tôi có thể nói tốt hơn là nó trừu tượng hơn về ngôn ngữ phổ biến;) –

Trả lời

1

Bài viết mà Robert liên kết là bài viết hay nhất. Tôi sẽ thêm rằng nếu ProductComponent chỉ tồn tại trong ngữ cảnh của AccountElement và AccountElement chỉ tồn tại trong ngữ cảnh của Tài khoản, thì theo ProductComponent mở rộng là trong ngữ cảnh của Tài khoản.

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