java包如何分层
分层原则
Java项目的包分层通常基于功能、模块或架构层次划分,常见的分层方式遵循高内聚低耦合原则。以下是几种主流分层模式:
按功能模块分层
适用于模块化清晰的业务系统,每个功能模块独立成包。

com.company.project.module1
├── controller # 模块1的API接口层
├── service # 业务逻辑层
├── repository # 数据访问层
├── model # 实体类/DTO
└── util # 模块专用工具类
com.company.project.module2
├── controller
├── service
└── ...
按架构层次分层
基于经典三层架构(表现层-业务层-数据层),适合单体应用。

com.company.project
├── config # 全局配置类
├── web # 表现层
│ ├── controller
│ └── dto # 数据传输对象
├── service # 业务逻辑层
│ ├── impl # 实现类
│ └── converter # 对象转换器
├── dao # 数据访问层(或repository)
│ ├── entity # 数据库实体
│ └── mapper # MyBatis映射接口
└── common # 公共模块
├── exception # 异常处理
└── utils # 通用工具
按领域驱动设计(DDD)分层
适用于复杂业务领域,强调领域模型为核心。
com.company.project
├── application # 应用服务层(用例编排)
├── domain # 领域层
│ ├── model # 聚合根/值对象
│ ├── service # 领域服务
│ └── repository # 领域仓储接口
├── infrastructure # 基础设施层
│ ├── persistence # 仓储实现
│ └── client # 外部服务调用
└── interfaces # 接口层
├── rest # REST API
└── mq # 消息队列监听
混合分层示例
结合模块与架构层次,灵活适应中型项目。
com.company.project
├── user # 用户模块
│ ├── api # 相当于controller
│ ├── domain # 领域对象
│ └── infra # 用户模块基础设施
├── order # 订单模块
│ ├── api
│ └── service
└── shared # 跨模块共享
├── security # 安全相关
└── cache # 缓存配置
注意事项
- 命名规范:包名全小写,使用逆域名(如
com.company.project)。 - 依赖方向:严格单向依赖(如
controller → service → repository)。 - 避免循环依赖:通过分包或接口隔离解决。
- 公共代码:跨层共享的代码(如工具类)放入
common或shared包。
根据项目规模和团队协作习惯选择合适的分层方式,保持一致性即可。






