当前位置: 首页 > news >正文

Domain、BO、BIZ 三层的协作关系

电商、银行、医疗三个领域的经典分层案例,展示 domainbobiz 三层的协作关系:

案例1:电商订单系统

1. Domain层(领域模型)
// domain/entity/Order.java
public class Order {private String orderId;private List<OrderItem> items;private OrderStatus status;// 领域行为:计算订单总价public BigDecimal calculateTotal() {return items.stream().map(item -> item.getPrice().multiply(item.getQuantity())).reduce(BigDecimal.ZERO, BigDecimal::add);}
}
2. BO层(业务对象)
// bo/OrderBO.java
public class OrderBO {private Order order;private InventoryService inventoryService;// 业务逻辑:校验库存并预留public void reserveInventory() {if (!inventoryService.checkStock(order.getItems())) {throw new BusinessException("库存不足");}}
}
3. Biz层(业务服务)
// biz/OrderService.java
public class OrderService {public void createOrder(OrderCreateDTO dto) {OrderBO orderBO = new OrderBO(convertToOrder(dto));orderBO.reserveInventory();  // 调用BO处理业务规则paymentService.charge(orderBO.getOrder());  // 协调第三方支付}
}

案例2:银行转账系统

1. Domain层
// domain/entity/Account.java
public class Account {private String accountId;private BigDecimal balance;// 领域行为:扣款public void debit(BigDecimal amount) {if (balance.compareTo(amount) < 0) {throw new InsufficientBalanceException();}this.balance = balance.subtract(amount);}
}
2. BO层
// bo/TransferBO.java
public class TransferBO {private Account source;private Account target;// 业务逻辑:执行双账户原子操作public void executeTransfer(BigDecimal amount) {source.debit(amount);target.credit(amount);  // 省略credit方法实现}
}
3. Biz层
// biz/TransferService.java
public class TransferService {@Transactionalpublic void transfer(TransferRequestDTO dto) {TransferBO transferBO = new TransferBO(accountRepository.findById(dto.getSourceAccountId()),accountRepository.findById(dto.getTargetAccountId()));transferBO.executeTransfer(dto.getAmount());  // 调用BOauditLog.logTransfer(dto);  // 协调审计日志}
}

案例3:医院预约系统

1. Domain层
// domain/entity/Appointment.java
public class Appointment {private Doctor doctor;private Patient patient;private LocalDateTime time;// 领域规则:校验预约时间有效性public boolean isValidTime() {return time.getHour() >= 9 && time.getHour() <= 17;}
}
2. BO层
// bo/AppointmentBO.java
public class AppointmentBO {private Appointment appointment;private ScheduleService scheduleService;// 业务逻辑:检查医生排班冲突public void checkConflict() {if (!scheduleService.isAvailable(appointment.getDoctor(), appointment.getTime())) {throw new ConflictException("医生该时段已排班");}}
}
3. Biz层
// biz/AppointmentService.java
public class AppointmentService {public void bookAppointment(AppointmentDTO dto) {AppointmentBO appointmentBO = new AppointmentBO(convertToEntity(dto));appointmentBO.checkConflict();  // 调用BO校验notificationService.sendConfirmation(appointmentBO.getAppointment());  // 协调通知}
}

关键总结

  1. Domain层‌:纯业务实体和规则,与技术无关
  2. BO层‌:组合多个领域对象的业务场景逻辑
  3. Biz层‌:协调领域逻辑与技术实现(如数据库、API调用)
  4. 适用场景‌:复杂业务系统(如金融、电商、医疗),简单CRUD项目可合并BO和Biz层
http://www.dtcms.com/a/394637.html

相关文章:

  • 【从小白到精通之数据库篇】Mysql--连接与子查询
  • C++ 函数详解:从基础到高级应用
  • HTML打包的EXE程序无法关闭?
  • openEuler2403安装Ollama
  • 苍穹外卖项目实战(day11-1)-记录实战教程、问题的解决方法以及完整代码
  • 【Linux命令从入门到精通系列指南】mv 命令详解:文件与目录移动、重命名及安全操作的终极实战手册
  • 【C语言】深入解析阶乘求和算法:从代码实现到数学原理
  • 图形库的基础--svg
  • 令牌桶算法
  • FPGA开发环境配置
  • 特别分享:怎么用coze搭建智能体?
  • Linux 管道
  • NumPy 系列(四):numpy 数组的变形
  • 【Zod 】数据校验新范式:Zod 在 TypeScript 项目中的实战指南
  • 「React实战面试题」useEffect依赖数组的常见陷阱
  • 系统架构设计师部分计算题解析
  • 3.1 BP神经网络结构(反向传播算法)
  • 2026:具身智能软件——开发者工具、范式与方向
  • linux收集离线安装包及依赖包
  • ✅ Python租房数据分析系统 Django+requests爬虫+Echarts可视化 贝壳网全国数据 大数据
  • FREERTOS任务TCB与任务链表的关系-重点
  • C++入门(内含命名空间、IO、缺省参数、函数重载、引用、内联函数、auto关键字、新式范围for循环、关键字nullptr的超全详细讲解!)
  • 红黑树的介绍
  • NumPy 系列(六):numpy 数组函数
  • 手写链路追踪-日志追踪性能分析
  • 数据库自增字段归零(id)从1开始累加
  • 轻量级本地化解决方案:实现填空题识别与答案分离的自动化流程
  • P1104 生日-普及-
  • CMake如何添加.C.H文件
  • 实时数据如何实现同步?一文讲清数据同步方式