架构分层概览
层级
核心职责
技术关注点
典型代码示例
DAO
数据持久化操作
SQL/NoSQL、连接池、ORM
userDao.findById(1)
Service
业务规则与事务管理
事务控制、领域模型、异常处理
userService.register()
Controller
HTTP协议交互
路由、参数校验、响应格式
@PostMapping("/login")
分层详解与最佳实践
🗃️ DAO 层(数据访问层)
核心职责
直接操作数据库/存储系统
封装原子性 数据操作(CRUD)
屏蔽底层存储差异(MySQL/MongoDB/Redis)
✅ 关键实践
public interface UserRepository extends JpaRepository < User , Long > {
Optional < User > findByEmail ( String email) ;
@Query ( "UPDATE User u SET u.status = :status WHERE u.id = :id" )
@Modifying
int updateUserStatus ( @Param ( "id" ) Long id, @Param ( "status" ) String status) ;
}
⚠️ 注意事项
禁止包含业务逻辑(如权限校验)
避免暴露数据库方言细节(如分页语法)
推荐使用接口隔离(便于Mock测试)
⚙️ Service 层(业务逻辑层)
核心职责
实现领域业务规则 (如订单状态机)
协调多DAO操作(事务一致性)
集成外部服务(支付接口、消息队列)
✅ 典型模式
@Service
@RequiredArgsConstructor
public class OrderService {
private final OrderDao orderDao;
private final PaymentService paymentService;
@Transactional ( rollbackFor = Exception . class )
public Order createOrder ( OrderCreateCommand command) {
if ( command. getItems ( ) . isEmpty ( ) ) {
throw new InvalidOrderException ( "订单商品不能为空" ) ;
}
Order order = assembleOrder ( command) ;
orderDao. save ( order) ;
paymentService. processPayment ( order) ;
return order;
}
}
⚠️ 分层规范
禁止直接处理HTTP请求/响应
避免过度冗长(超过300行应考虑拆分)
推荐使用DTO隔离持久化对象
🌐 Controller 层(控制层)
核心职责
处理HTTP协议细节
统一参数校验 与响应封装
路由分发与版本控制
✅ RESTful 最佳实践
@RestController
@RequestMapping (</