使用 ArchUnit 守护分层架构
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
文章摘要
本文讨论了软件项目和架构的易腐化问题,并提出了通过自动化检查来维护包结构的重要性。作者通过个人经验强调了代码结构的管控,提出了使用ArchUnit作为Java测试库以验证应用程序架构和约束的建议。
Java工程的包结构
文章介绍了Java应用项目中的两种组织代码的方式:按类代码分包("大平层"风格)和按业务模块分包。同时,展示了MVC三层结构和DDD四层架构的层次划分方式,以及由此产生的四种不同的包组织方法。
MVC大平层分包
这种方式是最简单的分包结构,要求上层对象可以依赖下层对象,但禁止反向依赖,并提出了一系列规则以保持架构整洁。
MVC按照模块分包
适用于复杂项目,每个业务模块下有单独的大平层结构。分包可以简化单个模块的开发复杂度,但带来的问题是业务可能会变得混乱,需要遵守额外规则来避免这种情况。
DDD大平层分包
DDD分包与MVC类似,但主要差别在于应用层的隔离,旨在更好地满足复杂互联网应用的需求。
DDD按照模块分包
这种分包方式专注于领域对象和领域服务,要求应用依赖领域而领域不依赖应用,避免上下文之间的循环依赖。
作者指出,选择分包方式应根据业务情况,过于复杂的包结构会增加样板代码和降低开发效率。分层的目的是隔离差异,如果没有可预见的差异,可以不考虑分层。
ArchUnit的原理与应用
ArchUnit利用反射和字节码技术检查代码规范,支持包依赖、类依赖、位置约定等多种检查。其API分为核心层、语法和架构逻辑层以及预定义规则层。最后,作者介绍了如何使用JUnit集成ArchUnit进行包结构检查。
想要了解更多内容?