此存储库的目标是明确一些术语的含义,这些术语在开发社区中造成了很多混乱。我想提一下,这个澄清将从Java开发人员的角度进行。

型模型

DTO

今天称为数据传输对象的模式在 Core J2EE 模式的第一个版本中被错误地称为值对象。该名称在 Core J2EE 模式书的第二版中得到了更正,但名称“值对象”变得非常流行,并且仍用作实际 DTO 的别名。

DTO 的属性:

  • 它在应用程序的最高层使用(如MVC或 Rest控制器)
  • 它只是一个数据容器,用于在层和层之间传输数据。
  • 它们可以聚合更多实体,也可以从某个实体获得部分信息
  • DTO 通常是 java.io.可序列化的(*仅当您要跨 JVM 传输数据时才需要。

DTO示例

public class UserCreationDTO {@Emailprivate String email;@NotNull@Size(min=8, max=20)private String password;public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

实体Entity

Entity是轻量级持久性域对象。通常,实体表示关系数据库中的表,每个实体实例对应于该表中的一行。

Entity的属性

  • 该类必须使用 javax.持久性.实体注释进行注释。
  • 该类必须具有公共或受保护的无参数构造函数。该类可能具有其他构造函数。
  • 该类不得声明为最终类。任何方法或持久实例变量都不得声明为最终变量。

Entity示例

@Entity
@Table(name = "user")
public class User {@Idprivate UUID id;private String email;private String password;private String firstName;private String lastName;private Long status;public UUID getId() {return id;}public void setId(UUID id) {this.id = id;}//  additional getters/setters}

值对象Value Object

值对象本身表示一组固定数据,类似于 Java 枚举。现实世界中价值对象的示例将是货币,颜色.红色,性别。女性、二维坐标 (x, y)、日期范围 [开始日期、结束日期]、日期(年、月和日)等。

值对象的属性

  • 值对象没有任何标识
  • 它完全由其值标识,并且是不可变的
  • 枚举可以被视为值对象

值对象的示例

public class Money {private final double amount;private final String currency;public Money(double amount, String currency) {this.amount = amount;this.currency = currency;}public double getAmount() {return amount;}public String getCurrency() {return currency;}
}

Pojo

Pojo 代表 普通的旧 Java 对象。一个普通的 Java 对象,不受 Java 语言规范强制限制之外的任何限制的约束。它不依赖于任何框架。它们是由 Sun 微系统公司在 EJB 3.0 中引入的。

Pojo的特性:

  • 所有实例变量都应该是私有的
  • 所有访问方法都应该是公开的
  • 不应有任何行为
  • 不应扩展任何类或实现接口
  • 不应使用任何注释 (@Entity)

Pojo的示例

public class EmployeePojo {public String firstName;public String lastName;private LocalDate startDate;public EmployeePojo(String firstName, String lastName, LocalDate startDate) {this.firstName = firstName;this.lastName = lastName;this.startDate = startDate;}public String name() {return this.firstName + " " + this.lastName;}public LocalDate getStart() {return this.startDate;}
}

JavaBean

JavaBean仍然是一个POJO,但引入了一套关于如何实现它的严格规则。

JavaBean的属性:

  • 访问级别 - 我们的属性是私有的,我们公开了获取者和设置者
  • 方法名称 – 我们的获取器和设置器遵循 getX 和 setX 约定(在布尔值的情况下,isX 可用于获取器)
  • 默认构造函数 – 必须存在无参数构造函数,以便可以在不提供参数的情况下创建实例,例如在反序列化期间
  • 可序列化 – 实现可序列化接口允许我们存储状态

JavaBean的示例

public class EmployeeBean implements Serializable {private static final long serialVersionUID = -3760445487636086034L;private String firstName;private String lastName;private LocalDate startDate;public EmployeeBean() {}public EmployeeBean(String firstName, String lastName, LocalDate startDate) {this.firstName = firstName;this.lastName = lastName;this.startDate = startDate;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}//  additional getters/setters}

书目

  • https://data-flair.training/blogs/pojo-class-in-java/
  • Value Object vs. Data Transfer Object (VO vs. DTO) : Adam Bien's Weblog
  • https://www.baeldung.com/java-pojo-class
  • Entities - The Java EE 6 Tutorial
  • ValueObject

模型相关术语:Model vs DTO vs Entity vs Value Object vs Pojo vs Bean相关推荐

  1. 【软件工程】CMMI 能力成熟度模型集成 ( 简介 | 相关术语 | CMMI 等级评估次序 )

    文章目录 一.CMMI 简介 二.CMMI 相关术语 三.CMMI 等级评估次序 一.CMMI 简介 CMMI 全称 Capability Maturity Model Integration , 能 ...

  2. PO、POJO、VO、Entity、Model、DTO的区别

    Bean.PO.POJO.VO.Entity.Model.DTO.DAO的区别总结 1.Bean 对于Bean而言,我的理解是只要是Java的类的就可以称为一个Bean,更用在Spring上,被Spr ...

  3. 计算机网络常用相关术语大全

    计算机网络 computer networks 网络结构:物理层.数据链路层.网络层.传输层.(会话层.表示层.)应用层 协议的三要素:Syntax(语法).Semantics(语义).Timing( ...

  4. 人工智能相关术语中英文对照

    人工智能相关术语(按首字母排序) 缩写 英语 汉语 A Activation Function 激活函数 Adversarial Networks 对抗网络 Affine Layer 仿射层 agen ...

  5. Paper:自动驾驶领域SAE标准之《道路机动车辆驾驶自动化系统相关术语的分类和定义》官方英文原文翻译与解读(一)

    Paper:自动驾驶领域L级别SAE标准<道路机动车辆驾驶自动化系统相关术语的分类和定义&Taxonomy and Definitions for Terms Related to Dr ...

  6. 《A Boundary-aware Neural Model for Nested Named Entity Recognition》

    论文链接:A Boundary-aware Neural Model for Nested Named Entity Recognition 模型代码:Github Abstract   在自然语言处 ...

  7. 神经网络相关术语_神经网络术语的初学者词汇表

    神经网络相关术语 One of the greatest road-blocks for newcomers to data science and deep learning is the mult ...

  8. java dto是什么_java项目中VO和DTO以及Entity,各自是在什么情况下应用的

    j2ee中,经常提到几种对象(object),理解他们的含义有助于我们更好的理解面向对象的设计思维. POJO(plain old java object):普通的java对象,有别于特殊的java对 ...

  9. 聚类(1)——混合高斯模型 Gaussian Mixture Model

    聚类系列: 聚类(序)----监督学习与无监督学习 聚类(1)----混合高斯模型 Gaussian Mixture Model 聚类(2)----层次聚类 Hierarchical Clusteri ...

最新文章

  1. OpenCV(基础补充)图像二值化
  2. 【347天】跃迁之路——程序员高效学习方法论探索系列(实验阶段105-2018.01.18)...
  3. Android 一个supportsRtl属性 RTl是什么东东?
  4. 简述区块链(1)- 也许只有这一篇
  5. 13.2.4 模板层——模板语言
  6. Oracle中table变量在JDBC中的运用
  7. 使用easyUI 格式化datagrid列
  8. 滤波电容、去耦电容、旁路电容的作用
  9. 字符串单词翻转c语言,C语言反转一行字符串单词示例
  10. 【翻译】steam离线时通过局域网游玩L4D2(求生之路2)
  11. 英语听力学习-VOA
  12. 通过V90PN通讯故障实例来看线路干扰与线路错误的区别
  13. win10计算机入门使用教程,win10系统使用教程_windows10基本使用教程图文步骤
  14. Linux 解决无法清空回收站问题
  15. 【OpenCV】之LUT函数
  16. php面包屑源码,推荐两款好用的WordPress面包屑插件
  17. skywalking服务端_skywalking-01-搭建skywalking服务端
  18. MTU问题,为何抓包到1514
  19. Cocos Creator 3D后期效果解决方案源码剖析--从入门到融汇贯通
  20. 【渝粤题库】国家开放大学2021春2099民事诉讼法学题目

热门文章

  1. React Native for OS X发布
  2. COG液晶屏是如何实现显示画面的呢?
  3. 对宝宝重要的头三年,你都做对了吗
  4. 【C++】秋招实习面经汇总篇
  5. ae渲染存在偏移_AE教程—如何同时打开多个AE窗口(AE双开或多开)
  6. 免费AI标注工具-医疗影像标注工具
  7. Leetcode——罗马数字转换
  8. 依据经度纬度计算距离方式
  9. TypeScript 中 Type 和 Interface 有什么区别?
  10. 传感器测试--声音采集与FFT 分析