Java开发中的分层开发和整洁架构

分层开发(横向拆分)

分层开发的概念:

  • maven多模块开发项目管理.
  • 可以利用这种管理功能,实现一个项目的多层次模块开发--分层开发.
    比如,当前项目HelloController依赖HelloService
  • 这样做目的: 复杂开发过程.解耦(不调整依赖关系,无法解耦).
  • 分层开发(横向拆分)和纵向拆分的区别在于,拆出多层,最终运行也是一个项目.

整洁架构

<<代码整洁之道>>作者Bob大叔曾经说过

翻译过来:

程序架构总是一样的.

让程序运行很简单.

让程序"正确"很难.

让程序维护简单,扩展简单就是正确

以 controller--service-mapper 为例,按照直觉分层开发,做依赖关系.

问题1: 没有实现控制层,对持久层之间的隔离关系,可以随意的在controller中注入,依赖mapper

问题2: 架构分层之间是纯粹强耦合.

分层开发没有达到最终的目的,实现解耦,实现扩展维护方便.

对应以上问题,在bob大叔的 <<整洁架构之道>>中,提到的解决的思想.

整洁架构落地方案

核心点: 分层的众多模块中,有最核心的业务模块(service).

其他的模块,包括controller,redis,rocketmq,mysql,mybatis这些模块切分出来,都是容易被替换掉的.

核心稳定的模块,如果依赖了容易变动不稳定模块,不满足整洁架构的思想.

解决方案: 依赖倒置(开发原则)

依赖倒置

  • 依赖倒置原则(Dependency Inversion Principle,DIP)是面向对象设计中的一项重要原则。它主要包含两个核心概念:
    1. 高层模块不应该依赖于低层模块的具体实现,而应该依赖于抽象。
    2. 抽象不应该依赖于具体实现,而应该依赖于更高层次的抽象。
  • 简而言之,依赖倒置原则提倡程序的高层模块和低层模块都应该依赖于抽象,而不是具体的实现细节。这样可以解耦系统的各个模块,达到易于扩展、灵活性高的设计效果。

以下是一些实践依赖倒置原则的方法:

  • 依赖注入(Dependency Injection,DI):通过依赖注入的方式,将依赖关系从代码内部移动到外部容器中管理。通过接口或抽象类定义依赖关系,并将具体实现通过构造函数、属性或方法参数的方式注入到使用者中。
  • 接口编程:使用接口或抽象类作为模块之间的约定,使得高层模块与低层模块之间的依赖关系建立在抽象上,而不是具体的实现类上。
  • 面向接口编程:在设计和开发过程中,尽量使用接口来定义模块之间的交互,而不是直接依赖于具体的类。这样可以提高系统的灵活性和可维护性。
  • 通过遵循依赖倒置原则,可以提高代码的可测试性、可扩展性和解耦度,使系统更易于维护和理解。
相关推荐
不才不才不不才17 分钟前
Spring 源码系列(29): 20 道高频面试题源码级解析合集
java·后端·spring
索隆zoro21 分钟前
Army 的可插拔架构:army-jdbc 与方言模块
java·后端
小蒜学长1 小时前
校园社团招新网站的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·校园社团招新网站
AOI小白新手上路1 小时前
韦东山《ARM 架构与编程》基于I.MX6ULL 3-1 硬件知识_LED 原理图 · 学习笔记
arm开发·学习·架构
Dovis(誓平步青云)1 小时前
多个链接不等于多份证据,新闻核验看板怎样合并来源
java·服务器·前端·javascript·人工智能·pdf·电脑
旺仔Sec2 小时前
2026年江西省职业院校技能大赛(中职组)应用软件系统开发赛项竞赛样题
java·应用软件系统开发
Dovis(誓平步青云)2 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
一条破秋裤2 小时前
Linux 线程同步:读写锁
java·linux·jvm
诚心呈意共享外卖配送系统2 小时前
共享骑手与聚合配送的区别及系统架构设计:运力池与订单聚合如何落地
架构·系统架构·创业创新
蜗牛互联网2 小时前
从Barclays扩大Claude部署看受监管软件工程的责任重分配
java·大数据·人工智能·后端·软件工程