Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CQRS和x2B中聚合的名称提供程序;ES供电解决方案,为所有子对象发出一次NameChangedEvent_C#_Domain Driven Design_Cqrs_Event Sourcing - Fatal编程技术网

C# CQRS和x2B中聚合的名称提供程序;ES供电解决方案,为所有子对象发出一次NameChangedEvent

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): 正如您可能知道的,当创建了许多对象时,在流程中重命名这些对象中

我有一个CQRS+ES解决方案,它需要一些事件来更改AggregateName。因为我有多个聚合负责保存域事件的不同信息。到目前为止,我有一个简单的命名策略,使用约定(主聚合名作为源,域对象作为源)

示例:使用约定后的主聚合名称
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