文章目录
- [Java 企业应用架构中的完整层级划分](#Java 企业应用架构中的完整层级划分)
Java 企业应用架构中的完整层级划分
除了常见的 Controller、Service、DAO 等标准层级外,现代 Java 企业应用架构中还包含更多专业化的层级。以下是完整的层级分类和说明:
核心层级(基础架构)
-
Entity/Domain Model(实体/领域模型层)
- 与数据库表结构对应的纯数据对象
- 包含 JPA/Hibernate/MyBatis 等 ORM 框架注解
-
DTO (Data Transfer Object)(数据传输对象层)
- 包含:
- Request DTO:接口入参对象
- Response DTO:接口返回对象
- Query DTO:复杂查询参数对象
- 包含:
-
VO (Value Object)(值对象层)
- 用于前端展示的定制数据结构
- 可能组合多个实体字段或计算字段
-
DAO/Repository(数据访问层)
- 基础实现:
JpaRepository
/MyBatis Mapper
- 扩展实现:自定义复杂查询接口
- 基础实现:
业务逻辑层
-
Service(服务层)
- 细分为:
- Interface:服务接口定义
- Impl:服务具体实现
- Domain Service:领域服务(DDD 模式)
- 细分为:
-
Facade(门面层)
- 聚合多个服务的复杂业务流程
- 对外提供粗粒度服务
-
Manager(管理层)
- 通用业务能力封装
- 典型场景:
- 事务管理
- 缓存管理
- 批量操作
接口层
-
Controller(控制层)
- 变体形式:
- RestController:RESTful API
- Controller:传统 MVC
- RPC Controller:Dubbo/gRPC 接口
- 变体形式:
-
Endpoint(端点层)
- 特殊协议接口:
- WebSocket 端点
- GraphQL 解析器
- RSocket 处理器
- 特殊协议接口:
基础设施层
-
Config(配置层)
- 包含:
- 应用配置(
@Configuration
) - 安全配置(
SecurityConfig
) - 组件配置(
RedisConfig
)
- 应用配置(
- 包含:
-
Interceptor(拦截器层)
- 典型实现:
- 日志拦截器
- 权限拦截器
- 限流拦截器
- 典型实现:
-
Filter(过滤器层)
- Servlet 过滤器
- 用于:
- 请求预处理
- 响应后处理
- 跨域处理
-
Aspect(切面层)
- AOP 切面实现:
- 事务切面(
@Transactional
) - 日志切面
- 性能监控
- 事务切面(
- AOP 切面实现:
辅助层级
-
Utils/Toolkit(工具层)
- 分类:
- 通用工具(
StringUtils
) - 领域工具(
OrderNoGenerator
) - 验证工具(
Validator
)
- 通用工具(
- 分类:
-
Constant(常量层)
- 包含:
- 错误码定义
- 业务状态码
- 系统常量
- 包含:
-
Enum(枚举层)
- 业务枚举:
- 状态枚举(
OrderStatus
) - 类型枚举(
UserType
)
- 状态枚举(
- 业务枚举:
-
Exception(异常层)
- 包含:
- 业务异常(
BusinessException
) - 系统异常(
SystemException
) - 异常处理器(
@ControllerAdvice
)
- 业务异常(
- 包含:
特殊架构层级
-
Listener/Subscriber(监听层)
- 事件处理:
- Spring 事件监听器
- 消息队列消费者
- 观察者模式实现
- 事件处理:
-
Job/Task(任务层)
- 定时任务:
@Scheduled
注解任务- Quartz 任务
- 异步任务:
@Async
- 定时任务:
-
Client/SDK(客户端层)
- 外部服务调用封装:
- HTTP 客户端(Feign/Retrofit)
- 第三方 SDK 封装
- 外部服务调用封装:
-
Adapter(适配层)
- 用于:
- 协议转换
- 遗留系统适配
- 第三方服务适配
- 用于:
-
Delegate(委托层)
- 复杂操作的代理实现
- 典型场景:
- 多数据源路由
- 降级处理
现代架构扩展层
-
BFF (Backend For Frontend)(聚合层)
- 为特定前端定制接口
- 聚合多个微服务数据
-
Gateway(网关层)
- 功能:
- 路由转发
- 统一鉴权
- 流量控制
- 功能:
-
Orchestrator(编排层)
- 微服务场景下的流程编排
- Saga 模式实现
各层调用关系示例
[HTTP Request] → [Gateway] → [Controller] → [Service] → [Repository] → [DB]
↑ ↓ ↓ ↓ ↓
[View] ← [BFF] ← [Mapper] ← [Manager] ← [Adapter] ← [Client]
↑ ↓ ↓ ↓ ↓
[Cache] [Aspect] [Event] [Delegate] [External System]
分层原则建议
-
单向依赖原则:下层永远不能依赖上层
-
层间通信 :
- 相邻层直接调用
- 跨层调用需通过接口
-
包结构示例 :
com.example ├── config # 配置层 ├── constant # 常量层 ├── controller # 控制层 ├── service # 服务层 │ ├── impl # 服务实现 │ └── dto # 数据传输对象 ├── dao # 数据访问层 ├── entity # 实体层 ├── aspect # 切面层 ├── exception # 异常层 └── util # 工具层
实际项目应根据业务复杂度选择合适的层级组合,过度分层会增加系统复杂性,分层不足则会导致代码耦合。