什么属于聚合根

2024-03-23

这是一个实用的领域驱动设计问题:

从概念上讲,我认为我得到了聚合根,直到我去定义一个聚合根。

我有一个 Employee 实体,它已作为聚合根出现。在商业领域,some员工可以记录与工作相关的违规行为:

员工-----*违规行为

由于并非所有员工都受到此限制,我认为违规行为不会成为员工总数的一部分,对吗?

因此,当我想要处理员工及其相关违规行为时,这是某些服务的两个单独的存储库交互吗?

最后,当我添加违规时,该方法是在员工实体上吗? 谢谢您的帮助!


经过更多研究后,我想我已经找到了问题的答案。

保罗·斯托维尔(Paul Stovell)对类似问题的回答略有编辑国内直拨留言板 http://tech.groups.yahoo.com/group/domaindrivendesign/message/9836。将“客户”替换为“员工”,将“订单”替换为“违规”,您就明白了。

只是因为客户参考订单 并不一定意味着订单下降 在客户聚合根内。 客户的地址可能是,但是 订单可以是独立的(对于 例如,您可能有一项服务 处理所有新订单,无论是谁 客户是。不得不走 客户->订单没有任何意义 这种情况)。

从域的角度来看,您可以 甚至质疑这些的有效性 参考文献(客户参考 订单列表)。你多久会 实际上需要all订单 顾客?在某些系统中它使 从某种意义上说,但在其他情况下,一个客户 可能会下很多订单。机会是 您希望在以下时间为客户下订单 日期范围或客户的订单 尚未处理的订单或订单 尚未支付的费用等等。 您需要全部的场景 其中可能相对不常见。 然而,更有可能的是 处理订单时,您将 想要客户信息。所以在 代码,Order.Customer.Name很有用, 但Customer.Orders[0].LineItem.SKU- 可能没那么有用。当然, 这完全取决于您的业务 领域。

换句话说,更新客户与更新订单无关。可以想象,订单或我的案例中的违规行为可以独立于客户/员工进行处理。

如果违规有详细信息行,则违规和违规行将成为同一聚合的一部分,因为更改违规行可能会影响违规。

编辑** 我的领域中的问题是违规行为没有行为。它们基本上是发生的事件的记录。尚不确定其影响。

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

什么属于聚合根 的相关文章

  • 使用 PHP 显示外部 Web 根文件夹中的所有图像

    我想显示存储在我的网络根文件夹之外的所有图像 请帮我 我只能重复显示一张图像 例如 如果我的文件夹中有 5 张图像 则只有一张图像在我的浏览器上显示 5 次 请帮我解决这个问题 我已经研究这个问题一个多月了 我是新手 帮助 谢谢 这是我正在
  • 通过随机样本对列进行分箱和聚合数据,并替换迭代更大的分箱大小

    下面是一个矩阵示例 mat lt matrix c 1 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 2 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0
  • DDD:通过身份引用聚合根内的实体

    我一直在寻找正确的参考方式entities位于一个聚合根 当我们只得到他们的身份来自 URL 参数 我问了一个上一个问题 https stackoverflow com questions 7196820 update an entity
  • 从 Android 应用程序中的本机库访问根文件(/system、/dev)

    我有一个原生库 它将尝试在 Android 设备的 system dev 文件夹中创建文件 使用 open fopen 等 现在我已经使用 JNI 和 NDK 将库与 A ndroid 应用程序集成 但在根文件夹中创建文件失败 我尝试从本机
  • Elasticsearch - 合并多个文档中的字段

    假设我有一堆这样的文档 foo 1 2 3 foo 3 4 5 对于针对这些文档运行的查询 我正在寻找一种方法来返回所有值的数组foo 最好是唯一的值 但重复也可以 foo 1 2 3 3 4 5 我研究了聚合 API 但我不知道如何实现这
  • Android SU 权限:如何使用它们?

    这里有一种情况 我正在使用 Java 开发一个 Android 应用程序 我对这些东西都很熟悉 但现在这是我第一次需要使用 SU 权限 我只需要替换 实际上是重命名 system app 目录中的文件 但看起来我无法以通常的方式执行它 Fi
  • SQL Group By - 从单列生成多个聚合列

    我想按公司和日期进行分组 并为 2 个单独的值 Flag Y 和 Flag N 生成计数列 输入表如下所示 Company Date Flag 001 201201 Y 001 201201 N 001 201202 N 001 20120
  • 导入数据和事件溯源

    我目前正在开发一个整体系统 我希望将其引入现代并结合 DDD 和 CQRS 我收到了重新编写解决方案的导入机制的请求 并认为这可能是开始此重新架构过程的好机会 目前流程是 用户上传 CSV 系统解析 CSV 并在屏幕上显示每一行 对每一行以
  • 领域驱动设计和聚合参考

    我正在设计领域模型 但有些东西似乎不太好 我从一个主要的聚合开始 它引用了其他聚合 而其他聚合也引用了更多聚合 我可以从主聚合开始遍历孔域模型 我看到的问题是我将在内存中保存聚合的所有实例 这是一个好的设计吗 我可以通过延迟加载解决内存问题
  • Javascript 域模型对象约定

    如果我必须在 C 中创建域模型对象 我可能会这样做 public class Person Public string Name get set Public string Gender get set Public int Age get
  • CQRS 对于我的域是否正确?

    我正在对一个档案进行建模 它是视频点播系统的一部分 将存档想象成 Windows 资源管理器 其中多个用户可以创建文件夹 上传视频 重组文件夹等 有业务规则 权限 确定是否允许用户执行任务 即重命名文件夹 移动文件夹 查看文件夹等 我已将每
  • DDD和应用层

    我在DDD中添加 Stateful Stateless WebService等是应用层 应用服务 吗 从下面的链接来看 这似乎是正确的 第二个问题 我创建了一个存储库类 所有涉及存储库的方法调用都应该包装在应用程序服务中吗 或者我可以直接在
  • 如何在没有 root 权限的情况下安装 python 3.x 和 2.y

    我正在一台没有root权限的共享机器上工作 但安装了Python 2 y 但我想要两种风格的Python 而且我想调用Python 2 y 只需键入 python 像往常一样 并为调用 Python 3 x 输入 python3 我知道这是
  • 使用 JPA 实体作为域模型是一个好习惯吗?

    或者创建一个由域模型组成的域层并与 JPA 实体对话以进行数据库访问 两种方法的优缺点是什么 谢谢 这确实取决于您对域进行编码的方式 一般来说 在 Java 中 我更喜欢创建一组单独的 JPA 注释的 DTO 来处理持久性 此类 DTO 将
  • 分面搜索的后过滤器和全局聚合之间有什么区别?

    搜索界面中的一个常见问题是您想要返回结果的选择 但可能想返回有关所有文档的信息 例如 我想查看所有红色衬衫 但想知道什么 其他颜色可供选择 这有时被称为 多面结果 或者 多面导航 这Elasticsearch 参考中的示例 https ww
  • 放弃root权限

    我有一个以 root 身份启动的守护进程 因此它可以绑定到低端口 出于安全原因 初始化后我非常希望它放弃 root 权限 谁能指点我已知正确C 中的一段代码可以做到这一点 我阅读了手册页 研究了不同应用程序中的各种实现 它们都是不同的 其中
  • ClientDataset 索引更改时不计算 TAggregateField

    我正在使用连接到 DBGrid 的 TClientDataset 和几个聚合字段 用于计算其他几个浮点字段的总和 所有字段均已在设计时创建 一切都按预期工作 直到 ClientDataset 的 IndexName 使用自定义索引更改 以便
  • 错误 1045 (28000) 用户“root”@“localhost”访问被拒绝(使用密码:YES)

    请原谅我是一个完全的初学者 我正在尝试使用 cmd 行登录到我在 Windows 计算机上使用 easyPHP 安装的第一个 mySQL 数据库 我将进入 mysql bin 并输入命令 mysql u root 为了登录 但我收到以下消息
  • 具有持久性无知对象的持久性和领域事件

    我一直在研究领域驱动设计领域事件 http www udidahan com 2009 06 14 domain events salvation 我真的很喜欢这些事件提供的关注点分离 我遇到了保留域对象和引发域事件的顺序问题 我想在域对象
  • CQRS - 读取端的事件重播

    我读过几篇关于 CQRS 的博客 它们都解释说 在写入端 事件会持久保存在事件存储中 并且根据请求 事件将被检索并聚合重播 我的问题是为什么读取端不需要聚合事件重播 因为您的读取端不使用聚合 读取端实现为投影 它根据聚合发出的事件流计算当前

随机推荐

  • 为接口赋值是否会复制任何内容?

    我一直在尝试理解 Go 中的接口概念 阅读this https stackoverflow com questions 13511203 why cant i assign a struct to an interface and this
  • 如何检测访问者的国家/地区? [复制]

    这个问题在这里已经有答案了 可能的重复 IP地址的位置检测技术 https stackoverflow com questions 2574542 location detecting techniques for ip addresses
  • 不开发动态生成 aspx 文件的“博客系统”的 3 大原因

    In this question https stackoverflow com questions 2417865 asp net problems with error access to the path path is denied
  • Android:隐藏 ActionBar,保留选项卡

    为了简单起见 我的操作栏中有选项卡 但操作栏占用了太多空间 我想要那个额外的空间 我需要一种方法来隐藏操作栏 同时保留我的选项卡 有办法做到这一点吗 或者有什么方法可以让选项卡内置到操作栏中 就像在横向模式下一样 谢谢 你可以有一个空的操作
  • Nginx 位置 try_files 与 add_header 重定向和 cors

    我想将请求重定向到index php以启用漂亮的链接 使用try files可以实现此目的 但是我似乎无法让try files和add headers同时工作 我当前的位置块如下所示 location api v1 try files ur
  • 使用 Jquery 动态生成时 Facebook 标签不会呈现

    给您一个简单的用例 在我的网站上 我显示 Facebook 用户发布的评论 对于每条评论 我都会使用 fb profile pic 标签和类似 fb 的按钮来显示 facebook 用户的照片 该页面渲染正确 所有内容都显示良好 现在 当用
  • RSpec 匹配器,用于检查集合以包含满足 lambda 的项目

    我对如何编写 RSpec 3 2 x 规范来检查列表是否包含至少一个满足条件的项目有点不知所措 这是一个例子 model Invoice new model name test changes model changes expect ch
  • 如何删除“clip-path”的不可见部分?

    我想剪切尺寸各不相同 高度各为 50 的图像 所以我想到使用 inset 方法clip path财产 但是 在这个属性中 切出的空间仍然保持高度 container display flex align items start img fl
  • 打开弹窗,让外人依然可以触摸

    如何在Android上打开PopupWindow并让所有其他组件可触摸而不关闭PopupWindow 它是这样创建的 public class DynamicPopup private final PopupWindow window pr
  • 线程“main”中的异常 java.lang.IllegalMonitorStateException

    我正在与Thread in Java我收到以下错误 我不明白为什么 Code import java util Random public class Test public static void main String args thr
  • 代码优先:仅在执行某些代码后才创建数据库?

    我想先使用代码创建一个数据库 我的数据库始终处于 DropCreateDatabaseAlways 模式 我注意到 如果我不尝试对数据库执行一些查询 例如 using var db new Models TnHContext var que
  • CodeIgniter - 获取最后一个 URI 段

    我试图获取 CI 中的最后一个 URI 段 但我不知道它的编号是多少 因为当用户单击页面内的链接时 将附加参数 整数 然后在控制器中使用它们通过 ajax 将相关数据库记录拉入页面 我如何告诉 CI 获取最后一段 就像是 record nu
  • 使用javascript在数组中组合单词

    假设我有一个数组 Alex Sam Robert 我想将它们组合起来 例如 获取第一个数组 0 并附加数组 2 这将是 AlexRobert array 0 的第一个字母是 A 并附加 array 2 的第一个字母 即 Robert 这将是
  • 使用 Extendscript 编写二进制文件。文件大小不正确

    进一步我的问题here https stackoverflow com questions 63022178 read binary file with extendscript我正在使用 Extendscript 将十六进制颜色列表从 P
  • 使用 OrbitControls 时锁定 x 轴旋转 - Three.js

    使用 OrbitControls 时锁定 x 轴旋转是否可行 目前我有一个挂在绳子上的圣诞星的对象模型 我希望它仅水平旋转 对于您的 OrbitControls 实例集 controls minPolarAngle Math PI 2 co
  • Twitter Bootstrap Datepicker 不会更新输入值

    我有这段代码 但现在我陷入困境
  • Unicode 联盟是否打算让 UTF-16 字符耗尽?

    当前版本的 UTF 16 只能编码 1 112 064 个不同的数字 码点 0x0 0x10FFFF Unicode 联盟是否打算让 UTF 16 字符耗尽 即创建一个代码点 gt 0x10FFFF 如果不是 为什么有人要编写 utf 8
  • Go中for循环中的多个变量

    我正在尝试在 Go 中编写一个带有多个变量的 for 循环 来自 javascript 世界 我想实现这样的目标 var i 10 var b 2 for var a b i i 2 b b some code 我尝试过这样的 原始翻译 i
  • laravel 5 在运行时更改数据库名称

    有没有办法更改连接的数据库名称而不是添加另一个连接 如果我在 Config database connections 中添加 3 或 5 个数据库是可以的 但是如果我正在使用 100 个或更多数据库怎么办 由于所有人都使用相同的主机 用户名
  • 什么属于聚合根

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