一、什么是实体类(entity class)
编写代码时,经常会遇到一些具有“现实”意义的“个体”,eg:一个用户、一首歌曲、一条评论等。它们在逻辑上是完整的整体,具有相似的结构,但是却因为“属性”的不同而不同。
下面看一个典型的Entity class:
//Entity类定义public class UserEntity { public String name; public int age; public String address;}//Entity对象UserEntity john = new UserEntity();john.name = "John";john.age = 20;john.address = "polyu, Hong Kong";
总结:
一个Entity类,代表了某一种“个体”,类中的属性则是该“个体”的具体体现。如UserEntity类,里面有name、age属性,用这些属性“描述”该种“个体”。
Entity类的具体对象,如john对象,代表了一个具体的实体。一般来说,一个具体的Entity类对象所代表的实体是唯一的。
通常,Entity的具体对象(如john对象)对应数据库的一行数据。
Entity是代码中操作数据的“最小单元”。
实体类的作用一般是与数据库做映射。
写实体类的规范:
根据设计,定义一组需要的private属性。
根据这些属性,创建它们的setter和getter方法。
提供带参数的构造器和无参数的构造器。
重写toString、equals、hashcode等方法(optional)。
实现序列化(Serializable接口、Parcelable接口也可以),并赋予一个版本号。
下面是一个Entity class的例子:
class Student implements Serializable{ /实现Serializable接口 private static final long serialVersionUID = 1L; //定义的私有属性 private int id; private String name; private int age; private double score; //无参数的构造器 public Student(){ } //有参数的构造器 public Student(int id,String name,int age, double score){ this.id = id; this.name = name; this.age = age; this.score = score; } //创建的setter和getter方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } //由于id对于学生这个类是唯一可以标识的,所以重写了父类中的id的hashCode()和equals()方法。 @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (id != other.id) return false; return true; } }
二、什么是Model
我们经常见到“Model”,如MVC模式中的M就是指“Model”,MVVM中的“Model-View-ViewModel”,数据库抽象层中的“Model”等。那么什么是model呢?
通常,Model有如下几种用法:
等价于Entity,完全不具备其他业务逻辑代码。
当成数据库接口层,就是将数据库的读写、增删、查改都封装在Model中,经常出现“getUserById”这样的写法。
当成纯粹的业务逻辑类。
Model是模型,而不是“数据”,Model应该是利用Entity实体,来组合、处理、整合更上层、更抽象数据的类。是基于Entity的更高层的数据抽象与处理。
下面看一个model class:
class UserListModel{ private UserEntity[] users; //构造函数、初始化用户列表等 UserEntity getUserByName(String name){ //查找... } void transformUserAddressFormat{ //转换格式地址 }}
三、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和Model的不同-关于代码的数据层/
https://www.cnblogs.com/echoer/p/4567240.html
来源地址:https://blog.csdn.net/SakuraMG/article/details/128652284