小编She*_*epy的帖子

访问Subclassed Aggregate成员

我知道我们不应该直接更改聚合根的子节点,而应该通过aggregate-root上的方法来执行它们.例如order.SetOrderLineQty(product, qty);

但是如果聚合根的孩子是抽象的呢?想象一下,你有Car聚合根,它包含一个IWheel列表作为聚合的一部分.你将如何通过其聚合根添加/更改轮子的属性(谁不知道它们可能是什么样的轮子)?

一个更真实的例子是:医生可以创建一个MedicalRerport(聚合根),其中包含一个IMedicalNote列表(作为MedicalReport聚合的一部分).IMedicalNote是一个基类/接口,它被子类化为一些具体的子类,例如BloodCheckNote,TemperatureNote,MineralConcentrationNote等.

每个子类都有不同的属性,它们都是可编辑的.MedicalReport聚合可以包含这些注释中的一个或多个.(每个注释子类都有一个特定的用户控件,供用户输入/更新详细信息,在大型MedicalReport屏幕下显示为面板/选项卡)

我的问题是,如何通过其aggregate-root(MedicalReport)严格添加/编辑这些注释的属性?由于我不允许直接更改这些注释属性,因此一个丑陋的选择是通过在聚合根(MedicalReport)上公开所有可能的注释属性,即:

report.SetWhiteBloodCellCount(cellCount);
report.SetBloodCheckComment(comment);
report.SetTemperature(bodyPart, temperature);
report.AddMineral(mineral, concentration);
Run Code Online (Sandbox Code Playgroud)

这些方法中的每一种都将在其内部子集合中更新(或创建新的)注释项.这有两个明显的问题:

  1. 我们必须在aggregate-root上定义所有可能的IMedicalNote子类的所有可用属性.这是不可接受的,因为子类的数量保证增长,取决于我们想要捕获的医疗数据的类型,这是第一位的继承的整个点.
  2. 列表中可以有多个相同音符类型的实例.这个API会失败,因为我们不能只说report.SetBloodCheckComment(comment)并期望它会更新列表中的BloodCheckNote项,因为我们允许列表中有多个BloodCheckNote项.

我仍然希望通过其聚合根保持与这些笔记的所有交互,因为它必须控制整个MedicalReport聚合是否有效保存,聚合是否不可修改,粗粒度乐观 - 并发检查等.但是我怎样才能做到这一点?

domain-driven-design aggregateroot

5
推荐指数
1
解决办法
493
查看次数

Windows Azure上推荐的ElasticSearch部署是什么?

请记住,ElasticSearch-Zookeeper插件不支持v0.90版本.使用单播,您更新IP列表的策略是什么?即升级/放大/缩小时.

什么客户端连接(从Web /工作者角色)到群集?你呢:

a)在集群中的所有节点上实现自己的循环/故障转移实现

b)在加入单播集群的客户端机器上启动本地(非数据/非主)弹性搜索过程.该应用程序将只连接到localhost

你在哪里存储你的数据?Azure blob网关?

您是否可以分享您关于天蓝色ElasticSearch体验的详细故事,以及需要注意的任何特定要点/问题?

干杯

azure elasticsearch apache-zookeeper

5
推荐指数
1
解决办法
2945
查看次数

Spring Websocket Security:如何防止直接向代理发送请求

Spring Websocket 允许客户端(即浏览器)直接将消息发送到任何代理支持的目的地,即允许绕过服务器端应用程序进行直接的客户端到客户端通信。在现实世界中,我认为直接向消息代理公开公开写入访问权限是不可接受的。出于安全和消息完整性的原因,您通常希望只允许服务器应用程序通过代理向客户端发送任何消息。但我找不到任何有关如何实现这一目标的信息。默认行为是浏览器对代理目标具有不受限制的读+写直接访问权限。

spring websocket spring-websocket

1
推荐指数
1
解决办法
1518
查看次数