2011-02-03 55 views
0

我想了解領域驅動設計的基礎知識。昨天我在一個項目中發現了一些代碼,Repository返回了一個實體列表,即List getMessages(),其中Message是一個實體(有自己的id並且是可修改的)。現在,在閱讀關於DDD中的存儲庫時,他們非常具體地指出存儲庫應該返回聚合根,並且聚合上的任何操作都應該通過調用聚合根中的方法來完成。DDD是否允許列表爲聚合根?

我想將List放在自己的類中,然後返回該類。但是,在我的項目中,除了符合DDD外,基本上不需要這樣做,因爲我們只顯示消息,添加新消息或刪除現有消息。我們永遠不會刪除所有消息,所以我們唯一的方法是,addMessage(...),getMessages(),updateMessage(...)removeMessage(...)這基本上是我們的域服務正在做的。

任何想法的人?在描述聚集和存儲庫時,DDD的最佳實踐是什麼?

回答

0

這些新的DDD令人困惑的方面之一是存儲庫的概念。 存儲庫: 使用類似集合的接口訪問域對象,從而在域和數據映射圖層之間進行調解。

存儲庫提供了獲取對聚合根的引用的功能。非實體,價值對象,但聚合根(我不同意「存儲庫應該返回聚合根」)。

建議: - 每個聚合根一個儲存庫

  • 庫接口(例如IMessageRepository)駐留在領域模型
public interface IMessageRepository() 
{ 
    void saveMessage(Message msg); 
    void removeMessage(Message msg); 
    Ilist<Messages> getMessages(); 
} 
  • 庫實現(例如NHibernateMessageRepository如果使用nhibernate)r在域名之外

希望這個幫助!

+0

當然,Repository不應該返回Aggregate Root,它應該總是隻返回一個引用,指向默認的Aggregate Root。但謝謝你的回覆,它確實有幫助。現在我已經買了埃裏克埃文斯的書,所以我會做一些進一步的研究。 – 2011-02-22 08:40:13