命令执行中的额外边界数据

卢卡·马塞拉

一段时间以来,我一直在思考一个设计问题,但我没有找到好的解决方案。它是关于 CQRS 和域边界的。

假设我有一个上下文,它是关于为系统进行预订,以及随后的事件。该系统允许将单个预订链接到单个事件(已经完成,没问题),以及将每周预订链接到一系列事件。每周预订完成定义一周中的某一天(额外数据不相关);每周预订总是有开始和结束日(半年)。

系统也有两种类型的天:正常天和不能举行活动的非工作日。

作为业务请求,用户希望对于每周的预订,系统单独取消在非工作日举行的特定事件。

实际上预订和事件存储在两个表中。当事件与特殊标志一起存储时,它被取消。我与当今的表格没有任何联系,因为我从未在我的业务环境中使用过它。到目前为止,由于业务边界(以及其他小数据,此处不相关)的效果很好。

这是我的问题:为了满足用户的请求(为每个删除的日期创建一个事件),我需要有关半年所有天数的信息(仅在同一工作日就足够了)。但是,要获得这些信息,我该如何进行?

我可能的解决方案:

  1. 在根实体中加载半年的所有天数。这可能真的很重,我必须扩展我的业务边界。
  2. 预处理命令,创建一个包含额外信息的命令。这将是一个命令,我读过的东西是危险的。这对我足够了。
  3. 用无效日期列表扩展命令。如何检查一天无效?我必须访问实际边界之外的数据,该数据与1相同。
  4. 创建在命令处理程序中使用的服务以获取非工作日列表。天上下文信息将在公共(或共享)上下文中移动。
  5. 为每周事件创建​​一个事件侦听器。创建每周事件时,它会加载非工作日列表(针对那半年的那个工作日)并触发一系列命令以取消该特定日期。这将密封边界,而不是将额外的数据添加到公共上下文并为额外的目的重用相同的代码(取消事件)。

哪个是最佳解决方案?

无理之声

石蕊测试:询问您的利益相关者,是否有一天工作日变成非工作日,以及那几天的每周预订会发生什么情况。此外,非工作日是否会变成工作日,以及那些日子的预订会发生什么

为每周事件创建​​一个事件侦听器。创建每周事件时,它会加载非工作日列表(针对那半年的那个工作日)并触发一系列命令以取消该特定日期。这将密封边界,而不是将额外的数据添加到公共上下文并为额外的目的重用相同的代码(取消事件)。

关闭,根据我对您所写内容的理解。

在我看来,你真的有两种不同的聚合;您有每周预订的定义,并且您有从不同预订中收集事件的每日时间表。

创建预订时,您的输入是开始日期、结束日期、一周中的某一天,可能还有一个域服务,可以返回该范围内一周中的天数列表。考虑日程安排或行程——我们正在定义此特定预订的候选日期。

您的事件侦听器在看到新预订时,会向该特定日期的日程表聚合发出命令,添加每日预订请求的事件。因为日程表知道它是否是“非工作日”,所以它可以将这些事件中的每一个标记为已安排或已取消(如果您希望该信息是明确的;您可以将其隐藏在工作日的状态中在某些系统中)。

空计划可以提前创建,也可以按需使用一些通用方法来确定它们是否是工作日,并且如果这是您当前域的一部分,则可以支持更改它们自己的工作状态。

这里的主要思想是,非工作日是您的域模型的一部分,并且由于它们跨越多个预订对象,因此它们显然是位于预订汇总之外的实体。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

gnuplot表面图中的额外边界投影线

来自分类Dev

Firefox上的额外边框div,但Safari或Chrome中没有

来自分类Dev

如何做phpexcel外边界

来自分类Dev

桌子外边界线填充

来自分类Dev

如何为GraphicsPath应用外边界

来自分类Dev

HTML表格外边界多个TR

来自分类Dev

如何为GraphicsPath应用外边界

来自分类Dev

HTML表格外边界多个TR

来自分类Dev

从文件读取时数组的外边界

来自分类Dev

R levelplot删除外边界(调整图边界)

来自分类Dev

R levelplot删除外边界(调整图边界)

来自分类Dev

数据清理:处理额外的if语句与执行额外的分配

来自分类Dev

在本地数据库中执行INSERT命令

来自分类Dev

意向中缺少“额外”数据

来自分类Dev

在C ++中读取额外的数据

来自分类Dev

删除切换按钮WPF的外边界

来自分类Dev

使用CSS创建多个向外边界半径

来自分类Dev

向古腾堡圆柱块的外边界添加半径

来自分类Dev

从FullCalendar v5删除日历的外边界

来自分类Dev

UNIX的ls命令中的额外“〜”符号

来自分类Dev

命令已在执行中

来自分类Dev

不需要在网格右侧的额外边框

来自分类Dev

Javafx 8 对话框额外边框

来自分类Dev

如何从python脚本打开cygwin,执行命令并从文件中的命令行获取数据

来自分类Dev

访问 sqlalchemy 关联对象中的额外数据

来自分类Dev

如何在 Java <= 8 中强制执行模块边界

来自分类Dev

在dockerfile中执行sqlite命令

来自分类Dev

在Python中执行Firefox命令

来自分类Dev

在tcl中执行linux命令