• Java 领域模型之失血、贫血、充血、胀血模型


    1.失血模型

    失血模型仅仅包含数据的定义和getter/setter方法,业务逻辑和应用逻辑都放到服务层中。这种类在Java中叫POJO。

    action
    service: 核心业务(复杂度:重)
    model:简单Set Get
    dao :数据持久化

    1. @Setter
    2. @Getter
    3. public class Commodity {
    4. private Long commodityId;
    5. private String commodityName;
    6. }
    7. @Setter
    8. @Getter
    9. public class Order {
    10. private Long orderId;
    11. private Long commodityId;
    12. private Date createTime;
    13. }


    2.贫血模型

    贫血模型中包含了一些业务逻辑,但不包含依赖持久层的业务逻辑。这部分依赖于持久层的业务逻辑将会放到服务层中。

    action
    service :简单服务组合、事务管理(复杂度:中)
    model:Set Get的基础上添加简单逻辑处理(复杂度:中)
    dao:数据持久化

    1. @Setter
    2. @Getter
    3. public class Commodity {
    4. private Long commodityId;
    5. private String commodityName;
    6. }
    7. @Setter
    8. @Getter
    9. public class Order {
    10. private Long orderId;
    11. private Long commodityId;
    12. private Commodity commodity;
    13. private Date createTime;
    14. public Order(Commodity commodity) {
    15. this.commodity = commodity;
    16. }
    17. }
    18. public class OrderService {
    19. @Resource
    20. private OrderMapper orderMapper;
    21. @Resource
    22. private CommodityMapper commodityMapper;
    23. public Order getOrderById(Long orderId) {
    24. Order order = orderMapper.getById(orderId);
    25. order.setCommodity(commodityMapper.getById(order.getCommodityId()));
    26. return order;
    27. }
    28. }

    3.充血模型

    充血模型中包含了所有的业务逻辑,包括依赖于持久层的业务逻辑。使用充血模型的领域层是依赖于持久层。

    action
    service :简单服务、事务管理(复杂度:中-
    model:Set Get的基础上添加复杂逻辑处理(复杂度:中+

    1. @Setter
    2. @Getter
    3. public class Commodity {
    4. private Long commodityId;
    5. private String commodityName;
    6. }
    7. @Setter
    8. @Getter
    9. public class Order {
    10. private Long orderId;
    11. private Long commodityId;
    12. private Commodity commodity;
    13. private Date createTime;
    14. @Resource
    15. private CommodityMapper commodityMapper;
    16. public Commodity getCommodity() {
    17. return commodityMapper.getById(this.commodityId);
    18. }
    19. }
    20. public class OrderService {
    21. @Resource
    22. private OrderMapper orderMapper;
    23. public Order getOrderById(Long orderId) {
    24. return orderMapper.getById(orderId);
    25. }
    26. }

    4.胀血模型

    胀血模型就是把和业务逻辑不想关的其他应用逻辑(如授权、事务等)都放到领域模型中。

    action
    model:Set Get的基础上添加复杂逻辑处理、事务处理(复杂度:重+

  • 相关阅读:
    前端性能优化百问大杂烩
    [LeetCode周赛复盘] 第 115 场双周赛20231014
    动画演示选择排序(Selection Sort)
    随笔而感触——javaWeb开发——一些小思考
    掌握JavaScript的练习之道:十个手写函数让你信手拈来!
    内网渗透之Linux反弹shell(二)
    精心整理 170 道 Python 面试题
    C# 实现websocket双向通信
    树的统计问题
    数据结构 【树状数组】【线段树】【珂朵莉树】
  • 原文地址:https://blog.csdn.net/qq_34253002/article/details/133909478