C# CQRS和x2B中聚合的名称提供程序;ES供电解决方案,为所有子对象发出一次NameChangedEvent
我有一个CQRS+ES解决方案,它需要一些事件来更改AggregateName。因为我有多个聚合负责保存域事件的不同信息。到目前为止,我有一个简单的命名策略,使用约定(主聚合名作为源,域对象作为源) 示例:使用约定后的主聚合名称C# CQRS和x2B中聚合的名称提供程序;ES供电解决方案,为所有子对象发出一次NameChangedEvent,c#,domain-driven-design,cqrs,event-sourcing,C#,Domain Driven Design,Cqrs,Event Sourcing,我有一个CQRS+ES解决方案,它需要一些事件来更改AggregateName。因为我有多个聚合负责保存域事件的不同信息。到目前为止,我有一个简单的命名策略,使用约定(主聚合名作为源,域对象作为源) 示例:使用约定后的主聚合名称SolutionAggregate(删除“聚合”)为“Solution” 集合的域对象:SolutionItem(主聚合名称+项) 收集命令:(commandType+AggregateName+Item): 正如您可能知道的,当创建了许多对象时,在流程中重命名这些对象中
SolutionAggregate
(删除“聚合”)为“Solution
”
集合的域对象:SolutionItem
(主聚合名称+项
)
收集命令:(commandType
+AggregateName
+Item
):
正如您可能知道的,当创建了许多对象时,在流程中重命名这些对象中的每一个都是相当复杂的
我在考虑某种NamingProvider
和NamingConsumer
模式(请不要将其与常见设计模式混淆)
我已经尝试了很多方法,但并没有真正找到解决方案来实现这一点,因此,INamingProvider
ID被分发到聚合/域对象上下文中的所有命令中
当一个INamingProvider
aka时。如果创建了聚合或域对象,我会将其名称值存储在存储库中。然后,当创建下一个对象(它在约定中使用名称,如blahObjectNameItem
或blahaggeratenameItem
)时。我会将NameProviderId
存储为聚合元素
然后当实现上述对象时,我只需检查它们的NamingProviderId
,获取NameProvider并给它们一个名称,构建类似于operation
+NameProviderName
+Suffix
的东西,即GetSolutionItem
其中Get
是一个操作,解决方案
是聚合名称,项
是后缀
信息:我需要根据上述聚合生成代码。这就是为什么我需要命名解决方案。每个类都有自己的名称,但它们都基于单个聚合
想象一下,我有100个基于单个聚合的类。我想改变它的名字,什么会影响下面所有的类。遍历所有对象并更改其名称的复杂性太高
这就是为什么我在寻找更好的解决方案
更新1:
只需可视化聚合下面的对象数量,假设您将有以下子对象:
基本骨料:SolutionAggregate
AggregateName:解决方案
(由于惯例,我从名称中删除了聚合
)
对象1:CreateSolutionCommand
对象2:SolutionCreatedEvent
对象3:SolutionItem
对象4:CreateSolutionItem
Object5:SolutionItemCreatedEvent
。。。等等
您应该看到这种模式。域对象的代码生成似乎非常错误这听起来像是一场兼容性噩梦;我认为这应该是痛苦的。@constantin galbenu如果这不是一项要求,那就错了。在你的领域中,什么是“解决方案”,为什么这个概念的名称会改变?我对你的问题感到困惑,你是否在谈论更改聚合中的名称字段(例如,解决方案的名称),这应该是微不足道的,或者在代码中重命名一个类及其所有事件,这很复杂,会导致版本控制问题,只有在领域专家出于某种原因更改了您的通用语言时才需要。
AddSolutionItem
RemoveSolutionItem
UpdateSolutionItem