DDD:共享具有多个聚合根的实体

2023-12-24

学习DDD,在我们的应用程序中存在三个聚合根,不同类型的表单,所有这些都需要上传一些PDF。这些 pdf 上传附加了一些元数据,例如上传者和上传时间等,以便将它们存储在自己的表中。

我的问题是这个 PDF 是否应该建模为值对象、实体或聚合根。

对我来说,它看起来像一个名为“附件”的实体,但是这个实体应该由所有聚合根共享,只有类型而不是实例。是否允许在多个根中使用相同的实体类型,如果是的话,那么模型的哪一部分应该负责创建该实体。

Update

class Attachment{
   Java.io.File pdf;
   Date attachedOn;
   .....
   //no operation for this class
}

@AggregateRoot
class DocumentA {
   Set<Attachment> attachments;
   Set<DocumentB> supportingDocumentsB;
   Set<DocumentA> supportingDocumentsA;
   .... //other properties unique to DocumentA

   attach(Attachment a);
   detach(Attachment a);
   addSupportingDocumentA(DocumentA doc);
   removeSupportingDocumentA(DocumentA doc);
   addSupportingDocumentB(DocumentB doc);
   removeSupportingDocumentB(DocumentB doc);
   .... //other operations unique to DocumentA
}

@AggregateRoot
class DocumentB {
   Set<Attachment> attachments;
   Set<DocumentB> supportingDocumentsB;
   Set<DocumentA> supportingDocumentsA;
   .... //other properties unique to DocumentB

   attach(Attachment a);
   detach(Attachment a);
   addSupportingDocumentA(DocumentA doc);
   removeSupportingDocumentA(DocumentA doc);
   addSupportingDocumentB(DocumentB doc);
   removeSupportingDocumentB(DocumentB doc);
   .... //other operations unique to DocumentB
}

@AggregateRoot
class SomeAggregateRoot{
   Set<Attachment> attachments;
   //some properties

   attach(Attachment a);
   detach(Attachment a);
   //some operations
}

现在的问题是如何Attachment类应该被建模为值对象(或)实体(或)聚合根。引用《领域驱动设计精炼》,Vaughn Vernon (ISBN-13: 978-0134434421) https://rads.stackoverflow.com/amzn/click/com/0134434420:

此外,值对象不是事物,但通常用于描述、量化或测量实体。


我认为附件概念更适合值对象概念,因为没有生命周期并且字段自然是不可变的。 数据库条目具有主键这一事实并不意味着它必须是域上下文中的实体。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DDD:共享具有多个聚合根的实体 的相关文章

  • 恢复域对象的最佳方法

    这是一个如此简单而常见的场景 我想知道到目前为止我是如何做到的以及为什么现在遇到问题 我有这个对象 基础设施程序集的一部分 public class Queue public class QueueItem public QueueItem
  • Symfony 2.8+,教义继承和形式

    在开始之前 请注意我正在学习 symfony 所以请记住这一点 我只是想了解它是如何工作的 这就是我想要实现的目标 我想使用学说制作一个实体继承的简单示例 这就是我的示例的样子 摘要父类 特点 儿童1班 Magician 儿童2班 Warr
  • 什么属于聚合根

    这是一个实用的领域驱动设计问题 从概念上讲 我认为我得到了聚合根 直到我去定义一个聚合根 我有一个 Employee 实体 它已作为聚合根出现 在商业领域 some员工可以记录与工作相关的违规行为 员工 违规行为 由于并非所有员工都受到此限
  • # 符号的 HTML 字符实体是什么?

    符号的 HTML 字符实体是什么 我四处寻找 英镑 不断返回货币 哈希 和 数字 但我尝试的似乎没有变成正确的字符 您可以在以下位置搜索单个字符 文件格式信息 http www fileformat info info unicode ch
  • 域对象和值对象 - 它们相等吗?

    通过查看 Zend 快速入门教程中的域对象示例以及考虑 DAO VO 模式的其他示例 它们似乎非常相似 我们能否推断出 值对象 与 域对象 是一样的 如果不是 您能澄清一下它们之间的区别吗 其中一个的功能是什么 如果另一个的功能又如何呢 我
  • 领域驱动设计和聚合参考

    我正在设计领域模型 但有些东西似乎不太好 我从一个主要的聚合开始 它引用了其他聚合 而其他聚合也引用了更多聚合 我可以从主聚合开始遍历孔域模型 我看到的问题是我将在内存中保存聚合的所有实例 这是一个好的设计吗 我可以通过延迟加载解决内存问题
  • 是否有在基于 DDD 的分层架构中的模型层和数据访问层之间使用 LINQ 的建议模式

    我一直在读蒂姆 麦卡锡的书关于 NET 中的 DDD 的精彩书籍 http www amazon co uk NET Domain Driven Design Solution Programmer dp 0470147563 但在他的示例
  • 实现领域驱动设计的函数式方法

    我在使用 C 编写领域驱动应用程序方面拥有丰富的经验 我编写的应用程序越多 我就越发现我想要采用一种不太适合标准 C OO 技术的方法 我想编写尽可能多的纯函数 因为它们真的很容易测试 我想以更具声明性的方式编写我的业务逻辑 所以我一直在研
  • EntityFramework 如何覆盖属性

    我刚刚开始在 VS2010 中使用 EF 那东西真是太神奇了 坦白说我有些不明白 例如 我有带有属性的 EntityType 它们是从数据库结构生成的 现在 我只需在代码中重写该属性 我不需要将属性的值保存回数据库 但每次从数据库读取它时
  • 有丰富的领域模型示例吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个简单的示例来说明使用富域模型的好处 理想情况下 我想要一个之前和之后的代码列表 应该尽可能
  • MapStruct 实现在 Spring Boot Web 应用程序中不起作用

    我是 Spring Boot 的新手映射结构 http mapstruct org Tool 早些时候 一个项目 由其他团队使用这些技术编写的 没有启动 然后 我在 Mapper 抽象类中进行了一些更改 但现在 Mapper 对象在应用程序
  • 每个 System.ComponentModel.DataAnnotations 属性的用途是什么?

    我正在使用带有 POCO 的实体框架 4 制作 MVC 3 应用程序 我想尽可能多地注释我的所有实体 然而 我遇到一个问题 我无法找到有关每个属性含义的良好文档 有些非常简单 比如 Required or StringLength 具有像这
  • 存储库本身通常不经过测试?

    抱歉 我对存储库模式 单元测试和 orm 工具还不熟悉 我一直在研究单元测试和存储库模式 并得出一些结论 我想知道我是否正确 存储库模式有助于在使用它的控制器中替换单元测试 例如 对吧 因为创建上下文 在 EF 中 或会话 在 NH 中 的
  • DDD 聚合和值对象

    我想问一下关于DDD功能的问题 假设我们有两个聚合 每个聚合都包含值对象地址 根据 Eric Evans DDD 我们应该将聚合彼此隔离 因此第一个聚合的聚合根不能有指向 Address 的链接 坦白说 这对我来说似乎没有意义 所以问题是如
  • Doctrine 生成实体命名空间问题?

    好吧 我对原则有最后一个问题 生成 实体命令 我运行以下命令 并得到预期的文件 src MyNamespace Bundle MyNamespaceBundle Resources config doctrine metadata orm
  • 身份验证和用户任务

    我正在考虑开发一个具有明确定义域的系统 主要基于网络 域的一部分包括像这样的实体Diary Booking Customer etc 不过我创建了另一个名为User其目的仅用于身份验证和授权 污染Customer具有特定于身份验证的数据的实
  • 寻找领域事件的例子

    有谁知道在哪里可以找到域事件实现的示例代码 如乌迪 达汉 http www udidahan com in 领域事件 救赎 http www udidahan com 2009 06 14 domain events salvation 在
  • 领域驱动设计 (Linq to SQL) - 如何删除聚合的某些部分?

    我似乎对整个 DDD LinqToSql 业务感到有点困惑 我正在使用 POCOS 和 linq to sql 构建一个系统 并且我有聚合根的存储库 因此 例如 如果您有 Order gt OrderLine 类 那么您就有了 Order
  • Symfony2:PrePersist/PreUpdate 生命周期事件未触发

    两个实体画廊相册 and 画廊图片具有 OneToMany ManyToOne 关系 One GalleryAlbum can have gt Many GalleryImage Many GalleryImage can be in gt
  • 如何将当前用户信息传递到 DDD 中的所有层

    类似的问题以前曾被问过 但不完全相同 除非我错过了 我想通过我的服务 域 域事件 域事件处理程序传递 IUserInfo 类实例 什么是最好的方法 我是不是该 通过注册使用 IoC 注入它 针对 Httpcontext Current se

随机推荐

  • 在Windows中,有没有办法将errno转换为HRESULT?

    我知道HRESULT FROM WIN32宏将 Win32 错误代码转换为 HRESULT 有什么方法可以从errno error 简而言之 不 As of http msdn microsoft com en us library 581
  • Raphael:通过简单的无限动画逐渐减慢动画速度

    这个问题在本质上与两年前提出的另一个问题类似 为什么 Raphael 的帧速率在这段代码上变慢了 https stackoverflow com questions 2733613 why does raphaels framerate s
  • MySQL - 查询所有没有预约的用户

    如果我有两个表 用户和约会 我将如何查询数据库以找到类似以下内容的内容 SELECT FROM users WHERE none of appointments user user id 我假设我需要某种类型的约会表连接 只是不知道从哪里开
  • Apache 缓存 javascript 资源?

    不久前我在使用 javascript 资源时遇到了麻烦 当我对它们进行更改时 它们不会生效 文件将变成无效的 javascript 萤火虫抛出错误和警告 我注意到我的更改没有出现 并且特殊字符被添加到文件末尾 再进一步挖掘 我注意到特殊字符
  • JavaScript 圆角透明背景

    我正在寻找一个可以在上面创建圆角的 JavaScript 库div具有透明背景的标签 使得父元素的背景颜色 图像在圆角处可见 以圆角为例without透明背景 看看左边的菜单这一页 http chaletsdesbouleaux com 请
  • Angular UI-Router 将根 url 发送到 404

    我有一个令人恼火的问题ui router 一切都按我想要的方式进行 所有错误的 URL 都会发送到404状态 但是 即使当 url 为时我的默认状态正确呈现 网址为 被重定向到 404 我怎样才能提供服务default向双方声明 and a
  • 更改 jquerymobile 上的自定义导航栏图标

    尚未找到更改具有多个页脚的页面上的自定义导航栏图标的解决方案 这就是我目前正在使用的 live menu ui icon css background url btn on gif important live menu ui icon c
  • 尝试在 for 循环中将元素添加到 xml 文件时出现 HIERARCHY_REQUEST_ERR

    正如标题所示 我尝试使用 for 循环将元素添加到 xml 文档中 我有一个ArrayList称为的字符串names我希望迭代 并为每个名称创建一个
  • 尝试打开 Pandas 时历史记录保存线程错误

    我刚刚在工作的远程桌面上安装了 IPython 我必须在桌面上创建一个快捷方式来连接到 IPython 因为远程桌面无法访问互联网 我能够成功打开 IPython 笔记本 但是 当我尝试导入 pandas 时 import pandas a
  • 如何测量执行的汇编指令的数量?

    我想以某种方式从二进制文件中获取 已执行的汇编程序指令的数量 考虑下面的代码 if password 0 p if password 1 a printf Correct Password n 那么如果我用例如启动程序 abc 它不会采用第
  • 迭代器不属于其分配的文本缓冲区

    这是一个简单的骨头save as 功能 gint save as GtkWidget parent struct buffers B GtkWidget file chooser gtk file chooser dialog new Sa
  • Javascript 模块模式、原型和 Google Closure

    我无法让此代码结构在 Google Closure 编译器的混淆中幸存下来 这是一些示例代码 var MyModule function function myModule Constructor function moduleFoo ur
  • 消除二值图像中的字符倾斜

    我正在研究车牌识别 问题是我必须消除二值图像中的字符倾斜 以提高模板匹配的准确性 我已经做了很多预处理来删除图像中不必要的像素 并且我可以将字符分割出来 但不幸的是 它们是倾斜的 从 转换为灰度到二进制 然后 预处理技术 分割后 从最后一张
  • XSLT:使用键和条件的“选择值”?

    这个问题是上一个线程的后续问题 XSLT 根据其他节点的值之和进行排序 https stackoverflow com questions 13502321 xslt sorting based on sum of values from
  • 如何在 App Engine 上免费运行应用程序

    我正在尝试在 Google App Engine 上运行 Parse Server 一个 Node js 应用程序 我正处于试用期 有 300 美元的免费信用 从这个页面开始 https cloud google com appengine
  • 将 Unity3d 与 Node.js 连接

    我正在尝试使用socket io 将我的unity3d 程序与node js 服务器连接 使用UnitySocketIO 我成功地建立了客户端和服务器之间的连接 但是 On 或 Emit 方法不起作用 有人可以帮我解决这个问题吗 void
  • 在 Matplotlib 中更改/删除轮廓线的透明度

    我正在使用轮廓绘制一些数据 但在设置透明度时遇到麻烦 我希望能够设置填充和线条的透明度 但似乎无法做到这一点 我的代码的简化版本如下 array np random rand 100 100 lonit and latit are lati
  • SQL - 如果满足使用多个先前列的条件,则 LAG 获取先前的值

    我有一个由以下人员创建的表 CREATE TABLE test table id INT EventName VARCHAR 50 HomeTeam VARCHAR 25 Metric INT INSERT INTO test table
  • 防止 AJAX 以字符串形式发送文件

    I have a file stored in this form imagesFile variable It contains file below 我想使用发送它FormData and AJAX 仅供参考 我正在使用 Vue 和 L
  • DDD:共享具有多个聚合根的实体

    学习DDD 在我们的应用程序中存在三个聚合根 不同类型的表单 所有这些都需要上传一些PDF 这些 pdf 上传附加了一些元数据 例如上传者和上传时间等 以便将它们存储在自己的表中 我的问题是这个 PDF 是否应该建模为值对象 实体或聚合根