【发布时间】:2017-03-01 11:25:43
【问题描述】:
我有一个设计问题在我脑海中盘旋了一段时间,但我没有找到一个好的解决方案。这是关于 CQRS 和域边界的。
假设我有一个上下文,即关于系统的预订和事件。该系统允许将单个预订链接到单个事件(已经完成,没有问题),以及链接到事件集合的每周预订。每周预订完成定义一周中的某一天(额外数据不相关);每周预订总是有开始和结束的一天(半年)。
系统也有两种类型的日子:正常日子和非工作日,不能举行活动。
作为业务请求,用户希望对于每周预订,系统单独取消在非工作日举行的特定活动。
实际上预订和活动存储在两个表中。当事件与特殊标志一起存储时,它会被取消。我没有与当天的表格链接,因为我从未在我的业务环境中使用过它。作为业务边界(与其他小数据,此处不相关),到目前为止,这工作得很好。
这是我的问题:为了满足用户的请求(为每个删除的日期创建一个事件),我需要有关半年所有天的信息(仅在同一工作日内就足够了)。但是,要获得这些信息,我该如何进行?
我可能的解决方案:
- 在根实体中加载半年的所有天数。这可能真的很重,我必须扩展我的业务范围。
- 预处理命令,创建一个带有额外信息的命令。这将是一个命令,我读过的东西很危险。对我而言足够了。
- 使用无效日期列表扩展命令。我如何检查一天是否无效?我必须访问我实际边界之外的数据,这与 1 相同。
- 创建一个服务,用于在命令处理程序中获取非工作日列表。天上下文信息将在公共(或共享)上下文中移动。
- 为每周事件创建事件侦听器。创建每周事件时,它会加载非工作日列表(针对该半年的那个工作日)并触发一系列命令以取消该特定日期。这将密封边界,不会将额外的数据添加到公共上下文中,并为额外的目的重用相同的代码(取消事件)。
哪个是最好的解决方案?
【问题讨论】: