0

我正在尝试了解领域驱动设计的基础知识。昨天我在一个我正在使用的项目中发现了一些代码,其中存储库返回了一个实体列表,即 List getMessages() ,其中 Message 是一个实体(有自己的 id 并且是可修改的)。现在,当阅读 DDD 中的存储库时,它们非常具体地指出存储库应该返回聚合根,并且聚合上的任何操作都应该通过调用聚合根中的方法来完成。

我想将 List 放在它自己的类中,然后返回该类。但是,在我的项目中,除了遵守 DDD 之外基本上不需要这样做,因为我们只显示消息、添加新消息或删除现有消息。我们永远不需要删除所有消息,所以我们唯一的方法是, , addMessage(...),getMessages()这 基本上就是我们的域服务正在做的事情。updateMessage(...)removeMessage(...)

有什么想法吗?在描述聚合和存储库时,DDD 的最佳实践是什么?

4

1 回答 1

0

DDD 新手令人困惑的方面之一是存储库概念。存储库:在域和数据映射层之间进行调解,使用类似集合的接口来访问域对象。

存储库提供了获取对聚合根的引用的能力。不是实体,值对象,而是聚合根(我不同意“存储库应该返回聚合根”)。

建议: - 每个聚合根有一个存储库

  • 存储库接口(例如 IMessageRepository)驻留在域模型中
public interface IMessageRepository()
{
     void saveMessage(Message msg);
     void removeMessage(Message msg);
     Ilist<Messages> getMessages();
}
  • 存储库实现(例如,如果使用 nhibernate,则为 NHibernateMessageRepository)驻留在域之外

希望这有帮助!!

于 2011-02-03T11:49:40.897 回答