2011-02-03 110 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