repository - 域驱动的设计,存储库和混合实体

标签 repository domain-driven-design

如果存储库在构建过程中相互通信,是否违反任何域驱动的设计原则?

例如,一个用户地址存储库与城市/地区/国家存储库进行对话以获取数据?

最佳答案

我认为这违反了域驱动设计,存储库不应相互引用。另外,不应在存储库与数据库表之间映射1:1。

这是AggregateAggregateRoot的概念。例如,假设数据库中有2个表:

Order
OrderLine

在关系为1:n的情况下,将(Order,OrderLine)定义为聚合,因为没有Order,OrderLine无法单独存在。在这种情况下,Order是此集合的根。

这样,而不是创建两个存储库:
OrderRepository
OrderLineRepository

您只需要使用一个OrderRepository来处理整个聚合,就可以使用级联负载,使用OrderLine进行插入和删除

因此,在您的情况下,应考虑是否存在地址/城市/地区/国家/地区存储库。

希望这个帮助

关于repository - 域驱动的设计,存储库和混合实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575653/

相关文章:

git - 路径 '.gitmodules' 在 '31627edc0c80332d93e694cb0ed379531fbc9de0' 中不存在

validation - 访问数据进行验证并使用DDD确定默认值

domain-driven-design - 如何处理跨聚合根的并发约束

c# - 如何确定 "DDD"解决方案中域或应用程序项目中的内容?

c# - 服务层(.NET 应用程序)中的授权和用户信息

dependency-injection - 将存储库接口(interface)作为参数传递给域类上的方法是否被认为是糟糕的设计?

java - Java 属性文件的良好存储库组织实践

maven-2 - 无法使用 Apache Archiva 作为镜像

java - 在不使用@Inject/@EJB的情况下从@Entity访问@Singleton

c# - 如果存储库用于聚合根,那么其他实体的数据访问逻辑应该放在哪里?