Domain driven design DDD建模1:1…N与查询性能的关系
我是DDD初学者,我有一个遗留项目,它肯定会从适当的域层中受益。必须修改应用程序以支持多个应用程序和UI层。域逻辑目前是使用事务脚本模式实现的。基本上我继承了一个不允许修改的DB结构,新应用程序应该是旧应用程序的替代品 我在这个领域的一小部分偶然发现了一个有趣的建模问题,我相信有经验的DDD从业者会对此感兴趣。关于这个问题我不能说得太具体,所以我将描述一个与我的问题非常相似的问题 问题描述 让我们假设我们应该管理一系列产品。产品由ID标识,它们包含一些描述,每个产品都有一些与之相关的图像。棘手的部分来了。图像及其内容物理存储在数据库中,因此它们是巨大的数据块。(现在让我们忽略在DB中存储图像的好坏,这只是一个例子)。添加/编辑/删除产品时必须强制执行一些不变量 添加产品Domain driven design DDD建模1:1…N与查询性能的关系,domain-driven-design,Domain Driven Design,我是DDD初学者,我有一个遗留项目,它肯定会从适当的域层中受益。必须修改应用程序以支持多个应用程序和UI层。域逻辑目前是使用事务脚本模式实现的。基本上我继承了一个不允许修改的DB结构,新应用程序应该是旧应用程序的替代品 我在这个领域的一小部分偶然发现了一个有趣的建模问题,我相信有经验的DDD从业者会对此感兴趣。关于这个问题我不能说得太具体,所以我将描述一个与我的问题非常相似的问题 问题描述 让我们假设我们应该管理一系列产品。产品由ID标识,它们包含一些描述,每个产品都有一些与之相关的图像。棘手的
- 只有当产品具有与其关联的图像时,该产品才有效,如果不添加图像,则不允许输入新产品
- 每个产品必须与5个图像关联,不多不少
- 必须维护与产品关联的图像顺序
- 可以替换现有产品的图像,但应保持关联图像的数量和顺序
- 删除产品时,还应删除与之关联的所有图像
很抱歉问了这么长的问题,但我觉得我真的应该指出我已经考虑过的解决方案。对于链接的图像,很抱歉,我还不允许上传图像。在您的用例中,一个重要的观察结果是,第一个解决方案的问题被隔离到应用程序的查询端。没有理由使用与用于查询的模型相同的模型来处理命令和强制执行约束。可以使用将读和写分开,这将允许您为特定的UI需求创建特定的读模型,并且读模型不会影响您的域模型。虽然使用与编写相同的模型进行读取很有诱惑力,特别是考虑到大多数ORM支持复杂的查询和给定的属性,但实际上,将读取模型与可执行域模型分离要容易得多 此外,沃恩·弗农(Vaughn Vernon)的系列文章是理解复杂的聚合设计的一个重要资源,但它是