我在我的Java微服务中遵循领域驱动设计和清洁/六角形架构。我在聚合根类中将域事件声明为非静态嵌套类。我的问题是这些类应该是静态嵌套类还是非静态嵌套类(内部类)?
我使用了非静态嵌套类,但是IntelliJ的思想建议将它们变成静态的。根据罗伯特·西蒙斯的Java核心著作,
内部类是实例作用域,静态嵌套类是类作用域.
正如我在领域驱动设计()中所理解的,如果没有聚合实例,那么拥有域事件实例就没有任何意义。这就是为什么我选择使用非静态嵌套类的原因。有人能解释一下吗?谢谢。
发布于 2022-04-02 22:53:05
嵌套类类型之间的主要区别
。
因此,如果我们将Domain Event
定义为一个非静态嵌套类,它将完全访问Aggregate
实例。这违反了主要的Domain Event
特性。
Immutability
Domain Event
必须是不可变的,附加整个Aggregate
状态会违反不可变性。它不应该拥有整个概念的状态,只有可能对订阅此事件的人有用的上下文信息的副本。
域事件没有业务逻辑
此外,Aggregate
还可以封装业务约束。如果Domain Event
有聚合实例,那么它可以访问业务逻辑。
作为结果,我们只需要使用静态嵌套类。
请注意,Domain Events
可能被本地和外部的有界上下文所消耗,但是Aggregate
受一个上下文的限制。在这种情况下,最好将Domain Events
移动到单独的类。Bounded contexts sharing a same aggregate可能会被排除在外
发布于 2022-04-02 21:16:30
静态嵌套类对我来说似乎是一个更好的选择,因为域事件没有真正的理由引用聚合根的this
(如果它们是嵌套类的话,这就是它们会得到的)。最好是明确地说明领域事件有一个字段显式地标识它们是什么事件(这不一定是一个聚合)。
https://stackoverflow.com/questions/71720104
复制相似问题