首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么嵌套类类型最适合域事件?

什么嵌套类类型最适合域事件?
EN

Stack Overflow用户
提问于 2022-04-02 18:21:47
回答 2查看 91关注 0票数 1

我在我的Java微服务中遵循领域驱动设计和清洁/六角形架构。我在聚合根类中将域事件声明为非静态嵌套类。我的问题是这些类应该是静态嵌套类还是非静态嵌套类(内部类)?

我使用了非静态嵌套类,但是IntelliJ的思想建议将它们变成静态的。根据罗伯特·西蒙斯的Java核心著作,

内部类是实例作用域,静态嵌套类是类作用域.

正如我在领域驱动设计()中所理解的,如果没有聚合实例,那么拥有域事件实例就没有任何意义。这就是为什么我选择使用非静态嵌套类的原因。有人能解释一下吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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可能会被排除在外

票数 2
EN

Stack Overflow用户

发布于 2022-04-02 21:16:30

静态嵌套类对我来说似乎是一个更好的选择,因为域事件没有真正的理由引用聚合根的this (如果它们是嵌套类的话,这就是它们会得到的)。最好是明确地说明领域事件有一个字段显式地标识它们是什么事件(这不一定是一个聚合)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71720104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档