模块化整体架构为经典整体架构

Enhancing business success through smarter korea database management discussions.
Post Reply
suchona.kani.z
Posts: 162
Joined: Sat Dec 21, 2024 5:59 am

模块化整体架构为经典整体架构

Post by suchona.kani.z »

模块化整体结构或微服务架构提供了一种有吸引力的替代方案。即使在整体中,也可以实现组件的清晰分离,同时实现较高的初始开发速度,而不会忽视干净的结构。

在Java生态系统中,有多种方法可以实现这种模块化,其中包括

包:项目内类和接口的结构分离。
ArchUnit:验证并确保符合架构规则。
Java 模块系统:自 Java 9 以来引入了语言级模块,以显式定义依赖项和访问权限。
多JAR项目:将应用程序拆分为多个JAR文件,以实现模块的物理分离。
弹簧模量
Spring Modulith 是一个“固执己见”的 Java 框架,这意味着它为 邮件营销给医生 开发人员提供了特定的方法、约定和标准,以促进应用程序的清晰结构化和模块化。

它支持应用程序的结构验证,支持基于事件的通信并提供各个模块的集成可测试性。

安装
要在 Spring Boot Gradle 项目中使用 Spring Modulith,需要以下依赖项:


通过测试验证
以下代码示例适用于 Lombok,可读性不完整 - Spring Modulith 提供特殊的测试支持来验证模块结构和规则合规性:



如果违反了 Modulith 规则,测试将失败并提供有关违规性质的详细信息。

结构验证
在 Spring Module 中,包被视为使用 @SpringBootApplication 注解的类级别的模块。这些模块只能通过各自模块的第一层(代表模块的公共 API)相互通信。

为了演示 Spring Modulith 的工作原理,我们考虑一个包含两个模块 Order 和 Product 的场景,其包结构如下



现在我们假设产品模块应该能够下订单。足智多谋的开发人员现在可以想到在 ProductService 中使用 OrderRepository 的想法。


直接访问第二模块级包。
现在,如果我们运行模块验证测试,我们会得到以下测试错误

禁止访问模块第一层以下的类,即使它们不是包私有的。正确的是,应该通过 OrderService 下订单,该服务也位于 Order 模块的第一层:



循环错误
在下一个用例中,订单模块应通知产品模块需要减少订购产品的库存。


如果我们现在再次进行模块验证,我们会收到以下错误消息:


模块之间出现了循环依赖关系。这可能会对应用程序的可修改性产生重大影响,因此是不允许的。

反转依赖关系 - 应用程序事件
这种情况下循环依赖问题就可以轻松解决。可以采用替代方法,而不是模块之间的直接依赖关系。从 Spring 1.0 开始,Spring 为 ApplicationEventPublisher 提供了通过进程内事件总线输出事件的选项。
Post Reply