域抽象中的 Bean 验证

Bean validation inside the domain abstraction

我一直在阅读 R. C. Martin 的 Clean Architecture。

我试图通过开发一个小项目来理解它,我试图在其中应用它的概念。 域层中的一个核心概念是不使用框架、第 3 方库并避免 @Annotations,只需将域中的 类 设为纯 POJO。

我想知道两件事。 在域层内进行我的 "entities" 验证在概念上是否正确,如果是这样,使用 Bean 验证将是一个合理的选择,因为它是 java 本身的规范?

POJO 域(业务)对象的工作是忠实地表示内容的值,并维护它所表示的信息的完整性。验证任何数据输入是其中的关键部分。防止错误输入是域 POJO 的主要工作。

所以,是的,使用 Bean Validation 框架来帮助忠实地正确表示域数据是非常有意义的。

针对框架和库的警告不应被简单地和字面地误解为没有 frameworks/libraries。该建议的目标是 不要将域 POJO 的内部与应用程序复杂性的外部世界交织在一起 。域 POJO 应该不知道它是如何被使用的。因此,您应该能够从此应用程序的代码库中获取域 POJO 的 class,并将其放入任何其他应用程序的代码库中,而无需进一步编程。域对象应该是不可知的,并且不知道它正在使用的应用程序。

避免这种不必要的混乱交织就是“干净”与“肮脏”架构的含义。您的应用程序的每个部分都应该专注于自己的职责,完成应用程序其他部分无法完成的工作,尽可能少地受到应用程序其他部分的干扰或纠缠。

Bean Validation 实现库由您的域 POJO 在内部使用,不关心外部应用程序,除了加载 Bean Validation 实现所需的配置。这种情况是完全合理的,并不违反马丁的建议。

例如,您的 CustomerInvoicePurchaseOrder class 应该对您选择的 reactive/flow architecture, or some event bus coordinating parts of your app, or whether your app is a local desktop app built in JavaFX versus a web app built in Vaadin Flow 一无所知。