分层架构核心职责

架构分层概览

层级 核心职责 技术关注点 典型代码示例
DAO 数据持久化操作 SQL/NoSQL、连接池、ORM userDao.findById(1)
Service 业务规则与事务管理 事务控制、领域模型、异常处理 userService.register()
Controller HTTP协议交互 路由、参数校验、响应格式 @PostMapping("/login")

分层详解与最佳实践

🗃️ DAO 层(数据访问层)

核心职责
  • 直接操作数据库/存储系统
  • 封装原子性数据操作(CRUD)
  • 屏蔽底层存储差异(MySQL/MongoDB/Redis)
✅ 关键实践
// 示例:Spring Data JPA 实现
public interface UserRepository extends JpaRepository<User, Long> {
   
    // 自动生成SQL: SELECT * FROM users WHERE email = ?
    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(</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不是少爷.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值