Fork me on GitHub

目录组织

目录组织:职责分层优先 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

优点

  1. 职责清晰:每一层的责任一目了然,新人上手快。
  2. 通用性强:适合大多数中小型项目,业界普遍接受。
  3. 代码复用高:公共逻辑容易抽取和沉淀。

缺点

  1. 业务分散:同一个业务功能往往需要在多个包中跳转,阅读成本高。
  2. 随着业务复杂度增加,容易形成“分层地狱”:文件众多,逻辑割裂。

二、业务聚合优先

以业务域为中心组织目录,把相关的 Controller、Service、Repository 放在同一个业务模块中。

目录组织大致如下:
com.example.project
├── user
│ ├── UserController
│ ├── UserService
│ └── UserRepository
├── order
│ ├── OrderController
│ ├── OrderService
│ └── OrderRepository
└── common
└── 公共工具类/基类

优点

  1. 业务聚合度高:与具体业务相关的代码都在一个模块中,查找和修改效率高。
  2. 适合微服务/DDD:天然与领域驱动设计(DDD)契合,更容易拆分为独立的服务。
  3. 降低耦合:不同业务模块之间相对独立,利于维护和演进。

缺点

  1. 重复代码风险:公共逻辑可能在多个业务模块里出现重复。
  2. 对团队要求高:需要开发者有较强的架构意识,避免各业务模块组织风格不一致。

三、如何选择

•小型/中型项目,团队经验有限:推荐使用 职责分层优先。结构清晰,成本低。
•业务复杂、多团队协作、未来可能微服务化:推荐 业务聚合优先。更贴近领域划分,扩展性更强。

一个折中的方式是:
• 在整体框架上以 职责分层 为主
• 在某些复杂业务下,单独采用 业务聚合 的目录组织

四、总结

• 职责分层优先:强调清晰的职责划分,适合简单、规范统一的项目。
• 业务聚合优先:强调业务闭环和领域聚合,适合复杂、大型、可演进的系统。

posted @ 2025-08-19 21:26  秋夜雨巷  阅读(7)  评论(0)    收藏  举报