目录组织
目录组织:职责分层优先 vs 业务聚合优先
在日常的项目开发中,常见的两种目录组织思路是 职责分层优先 和 业务聚合优先。
一、职责分层优先
按照软件架构中常见的分层方式,将代码根据职责来分类。常见的分层有:
•Controller 层:负责接收请求、返回结果
•Service 层:封装业务逻辑
•Repository / DAO 层:处理数据持久化
•Domain / Entity 层:存放领域模型或数据库实体
目录组织大致如下:
com.example.project
├── controller
├── service
├── repository
└── domain
按职责分层(Controller、Service、Repository)→ 再细分业务
com.example.project.controller.user
com.example.project.service.user
com.example.project.repository.user
com.example.project.domain.user
优点
- 职责清晰:每一层的责任一目了然,新人上手快。
- 通用性强:适合大多数中小型项目,业界普遍接受。
- 代码复用高:公共逻辑容易抽取和沉淀。
缺点
- 业务分散:同一个业务功能往往需要在多个包中跳转,阅读成本高。
- 随着业务复杂度增加,容易形成“分层地狱”:文件众多,逻辑割裂。
二、业务聚合优先
以业务域为中心组织目录,把相关的 Controller、Service、Repository 放在同一个业务模块中。
目录组织大致如下:
com.example.project
├── user
│ ├── UserController
│ ├── UserService
│ └── UserRepository
├── order
│ ├── OrderController
│ ├── OrderService
│ └── OrderRepository
└── common
└── 公共工具类/基类
优点
- 业务聚合度高:与具体业务相关的代码都在一个模块中,查找和修改效率高。
- 适合微服务/DDD:天然与领域驱动设计(DDD)契合,更容易拆分为独立的服务。
- 降低耦合:不同业务模块之间相对独立,利于维护和演进。
缺点
- 重复代码风险:公共逻辑可能在多个业务模块里出现重复。
- 对团队要求高:需要开发者有较强的架构意识,避免各业务模块组织风格不一致。
三、如何选择
•小型/中型项目,团队经验有限:推荐使用 职责分层优先。结构清晰,成本低。
•业务复杂、多团队协作、未来可能微服务化:推荐 业务聚合优先。更贴近领域划分,扩展性更强。
一个折中的方式是:
• 在整体框架上以 职责分层 为主
• 在某些复杂业务下,单独采用 业务聚合 的目录组织
四、总结
• 职责分层优先:强调清晰的职责划分,适合简单、规范统一的项目。
• 业务聚合优先:强调业务闭环和领域聚合,适合复杂、大型、可演进的系统。


浙公网安备 33010602011771号