Java中的实体类(entity class)和model

浅浅的花香味﹌ 2024-03-30 17:40 112阅读 0赞

一、什么是实体类(entity class)

编写代码时,经常会遇到一些具有“现实”意义的“个体”,eg:一个用户、一首歌曲、一条评论等。它们在逻辑上是完整的整体,具有相似的结构,但是却因为“属性”的不同而不同。

下面看一个典型的Entity class:

  1. //Entity类定义
  2. public class UserEntity {
  3. public String name;
  4. public int age;
  5. public String address;
  6. }
  7. //Entity对象
  8. UserEntity john = new UserEntity();
  9. john.name = "John";
  10. john.age = 20;
  11. john.address = "polyu, Hong Kong";
总结:
  • 一个Entity类,代表了某一种“个体”,类中的属性则是该“个体”的具体体现。如UserEntity类,里面有name、age属性,用这些属性“描述”该种“个体”。

  • Entity类的具体对象,如john对象,代表了一个具体的实体。一般来说,一个具体的Entity类对象所代表的实体是唯一的。

  • 通常,Entity的具体对象(如john对象)对应数据库的一行数据

  • Entity是代码中操作数据的“最小单元”。

  • 实体类的作用一般是与数据库做映射。

写实体类的规范:
  1. 根据设计,定义一组需要的private属性。

  2. 根据这些属性,创建它们的setter和getter方法。

  3. 提供带参数的构造器和无参数的构造器。

  4. 重写toString、equals、hashcode等方法(optional)。

  5. 实现序列化(Serializable接口、Parcelable接口也可以),并赋予一个版本号。

下面是一个Entity class的例子:

  1. class Student implements Serializable{ /实现Serializable接口
  2. /**
  3. * 版本号
  4. */
  5. private static final long serialVersionUID = 1L;
  6. //定义的私有属性
  7. private int id;
  8. private String name;
  9. private int age;
  10. private double score;
  11. //无参数的构造器
  12. public Student(){
  13. }
  14. //有参数的构造器
  15. public Student(int id,String name,int age, double score){
  16. this.id = id;
  17. this.name = name;
  18. this.age = age;
  19. this.score = score;
  20. }
  21. //创建的setter和getter方法
  22. public int getId() {
  23. return id;
  24. }
  25. public void setId(int id) {
  26. this.id = id;
  27. }
  28. public String getName() {
  29. return name;
  30. }
  31. public void setName(String name) {
  32. this.name = name;
  33. }
  34. public int getAge() {
  35. return age;
  36. }
  37. public void setAge(int age) {
  38. this.age = age;
  39. }
  40. public double getScore() {
  41. return score;
  42. }
  43. public void setScore(double score) {
  44. this.score = score;
  45. }
  46. //由于id对于学生这个类是唯一可以标识的,所以重写了父类中的id的hashCode()和equals()方法。
  47. @Override
  48. public int hashCode() {
  49. final int prime = 31;
  50. int result = 1;
  51. result = prime * result + id;
  52. return result;
  53. }
  54. @Override
  55. public boolean equals(Object obj) {
  56. if (this == obj)
  57. return true;
  58. if (obj == null)
  59. return false;
  60. if (getClass() != obj.getClass())
  61. return false;
  62. Student other = (Student) obj;
  63. if (id != other.id)
  64. return false;
  65. return true;
  66. }
  67. }

二、什么是Model

我们经常见到“Model”,如MVC模式中的M就是指“Model”,MVVM中的“Model-View-ViewModel”,数据库抽象层中的“Model”等。那么什么是model呢?

通常,Model有如下几种用法:

  • 等价于Entity,完全不具备其他业务逻辑代码。

  • 当成数据库接口层,就是将数据库的读写、增删、查改都封装在Model中,经常出现“getUserById”这样的写法。

  • 当成纯粹的业务逻辑类。

Model是模型,而不是“数据”,Model应该是利用Entity实体,来组合、处理、整合更上层、更抽象数据的类。是基于Entity的更高层的数据抽象与处理。

下面看一个model class:

  1. class UserListModel{
  2. private UserEntity[] users;
  3. //构造函数、初始化用户列表等
  4. UserEntity getUserByName(String name){
  5. //查找...
  6. }
  7. void transformUserAddressFormat{
  8. //转换格式地址
  9. }
  10. }

三、entity和model

这两种说法,一般是根据上下文来的,eg:Model是因为有MVC、MVVM这种场景,叫做Model,这里的Model是一种职责。Entity则更接近是一种表达业务概念的实体,eg:一个User、一个Order等等。只是在不同的地方,不同的命名方式罢了。(二者有时候可以混为一谈)


四、实体类要实现序列化和反序列化

有两种方式:1.实现Serializable接口;2.实现Parcelable接口

序列化和反序列化的介绍,请参考下面这篇:

https://blog.csdn.net/SakuraMG/article/details/128654320?spm=1001.2014.3001.5501

Serializable接口和Parcelable接口的介绍,请参考下面这篇文章:

https://blog.csdn.net/SakuraMG/article/details/128672560


部分内容来源于:
http://tutuge.me/2015/03/01/Entity%E5%92%8CModel%E7%9A%84%E4%B8%8D%E5%90%8C-%E5%85%B3%E4%BA%8E%E4%BB%A3%E7%A0%81%E7%9A%84%E6%95%B0%E6%8D%AE%E5%B1%82/
https://www.cnblogs.com/echoer/p/4567240.html

发表评论

表情:
评论列表 (有 0 条评论,112人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java实体(entity)作用

    对java实体类的众多理解: A .就是属性类,通常定义在model层里面 B. 一般的实体类对应一个数据表,其中的属性对应数据表中的字段。 好处: 1.对对象实体