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

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

1.失血模型

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

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

@Setter
@Getter
public class Commodity {private Long commodityId;private String commodityName;}@Setter
@Getter
public class Order {private Long orderId;private Long commodityId;private Date createTime;}


2.贫血模型

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

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

@Setter
@Getter
public class Commodity {private Long commodityId;private String commodityName;}@Setter
@Getter
public class Order {private Long orderId;private Long commodityId;private Commodity commodity;private Date createTime;public Order(Commodity commodity) {this.commodity = commodity;}}public class OrderService {@Resourceprivate OrderMapper orderMapper;@Resourceprivate CommodityMapper commodityMapper;public Order getOrderById(Long orderId) {Order order = orderMapper.getById(orderId);order.setCommodity(commodityMapper.getById(order.getCommodityId()));return order;}}

3.充血模型

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

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

@Setter
@Getter
public class Commodity {private Long commodityId;private String commodityName;}@Setter
@Getter
public class Order {private Long orderId;private Long commodityId;private Commodity commodity;private Date createTime;@Resourceprivate CommodityMapper commodityMapper;public Commodity getCommodity() {return commodityMapper.getById(this.commodityId);}}public class OrderService {@Resourceprivate OrderMapper orderMapper;public Order getOrderById(Long orderId) {return orderMapper.getById(orderId);}
}

4.胀血模型

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

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

http://www.lryc.cn/news/198163.html

相关文章:

  • ifndef是什么,如何使用?
  • PXIE板卡,4口QSFP+,PCIE GEN3 X8,XILINX FPGA XCVU3P设计
  • 数据分析:密度图
  • docker load and build过程的一些步骤理解
  • 批量处理图像模板
  • 2023_Spark_实验十四:SparkSQL入门操作
  • 如何将几个模型合并成一个
  • 异常气体识别与飘移
  • 分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测
  • 35 机器学习(三):混淆矩阵|朴素贝叶斯|决策树|随机森林
  • ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+
  • webrtc gcc算法(1)
  • 2022年亚太杯APMCM数学建模大赛C题全球变暖与否全过程文档及程序
  • 苹果开发者 Xcode发布TestFlight全流程
  • Spring Security—Servlet 应用架构
  • 排序优化:如何实现一个通用的、高性能的排序函数?
  • 车载开发学习——CAN总线
  • 2023年知名国产数据库厂家汇总
  • 【ARM Coresight SoC-400/SoC-600 专栏导读】
  • 在Go中创建自定义错误
  • Vue.js2+Cesium1.103.0 十三、通过经纬度查询 GeoServer 发布的 wms 服务下的 feature 对象的相关信息
  • 使用STM32怎么喂狗 (IWDG)
  • GEE:计算和打印GEE程序的执行时间
  • GDPU 数据结构 天码行空5
  • SQLAlchemy学习-12.查询之 order_by 按desc 降序排序
  • 如何轻松打造数字人克隆系统+直播系统?OEM教你快速部署数字人SaaS系统源码
  • 药物滥用第四篇介绍
  • Apache Doris (四十三): Doris数据更新与删除 - Update数据更新
  • 面试算法29:排序的循环链表
  • python中不可变类型和可变类型