热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

模型相关术语:ModelvsDTOvsEntityvsValueObjectvsPojovsBean

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

此存储库的目标是明确一些术语的含义,这些术语在开发社区中造成了很多混乱。我想提一下,这个澄清将从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


推荐阅读
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文探讨了一个Web工程项目的需求,即允许用户随时添加定时任务,并通过Quartz框架实现这些任务的自动化调度。文章将介绍如何设计任务表以存储任务信息和执行周期,以及如何通过一个定期扫描机制自动识别并加载新任务到调度系统中。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 本文介绍如何通过Java代码调用阿里云短信服务API来实现短信验证码的发送功能,包括必要的依赖添加和关键代码示例。 ... [详细]
  • 我在尝试将组合框转换为具有自动完成功能时遇到了一个问题,即页面上的列表框也被转换成了自动完成下拉框,而不是保持原有的多选列表框形式。 ... [详细]
  • 本文介绍了一种在 Android 开发中动态修改 strings.xml 文件中字符串值的有效方法。通过使用占位符,开发者可以在运行时根据需要填充具体的值,从而提高应用的灵活性和可维护性。 ... [详细]
  • 个人博客:打开链接依赖倒置原则定义依赖倒置原则(DependenceInversionPrinciple,DIP)定义如下:Highlevelmo ... [详细]
  • Java多线程售票案例分析
    本文通过一个售票系统的实例,深入探讨了Java中的多线程技术及其在资源共享和并发控制中的应用。售票过程涉及查询、收款、找零和出票等多个步骤,其中对总票数的管理尤为关键。 ... [详细]
  • 在开发过程中,有时需要提供用户创建数据库的功能。本文介绍了如何利用 .NET 和 ADOX 在应用程序中实现创建 Access 数据库,并详细说明了创建数据库及表的具体步骤。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
author-avatar
钢铁年代2502883227
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有