Entity和Model的不同-关于代码的数据层

前言

经常都能在一些博客、文档中看到“Model”、“Entity”的字样。如MVC模式中的“M就是Model”,“MVVM对应的Model-View-ViewModel”,数据库抽象层里面的“Model“等。

它们的区别到底是什么?

其实没有真正官方的对Entity和Model的定义,在此我只是说说我自己的理解。

什么是Entity

先看看这个单词是什么意思:
爱词霸:n: 实体,实际存在物,本质。

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

看看一个典型的Entity类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Java

//Entity类定义
class UserEntity {
public String name;
public int age;
public String address;
}

//Entity对象
UserEntity john = new UserEntity();
john.name = "John";
john.age = 20;
john.address = "China Hubei Wuhan";

UserEntity tom = new UserEntity();
tom.name = "Tom";
tom.age = 30;
tom.address = "USA Californian";

所以:

  • Entity类,或者说实体类,代表了一种“个体”,类中的属性(就是各种变量)则是这个“个体”的具体体现。如UserEntity类,里面有name、age属性,就是说Entity类“描述”了某种个体。
  • Entity类的具体对象,代表了一个具体的实体,一般来说,在代码当中,一个具体的Entity类对象所代表的实体应当是唯一的。
  • 往往Entity类的定义跟数据库中的表定义是一一对应的。
  • 而Entity的具体对象往往对应数据库中的一行数据。
  • Entity是代码中操作数据的“最小单元”。

什么是Model

各种用法

其实很多时候,Model有如下几种用法:

  1. 当成Entity用,完全不具备其他业务逻辑代码。
  2. 当成数据库接口层,就是将数据库的读写,增删改查都封装在了Model中,往往就会有如“getUserByID”这样的方法。
  3. 当成纯粹的业务处理类。

所以仁者见仁,智者见智,其实都可以。

在此说说我的认识。

我的认识

先看看Model单词的意思:
爱词霸:n: 模型;模式;典型。

既然是模型,而不是“数据”,所以我觉得,Model应该是利用Entity实体,来组合、处理、整合更上层、更抽象数据的类

还是基于上面的“UserEntity”,看看下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
class UserListModel {
private UserEntity[] users;

//构造函数,初始化用户列表等。

UserEntity getUserByName(String name) {
//查找...
}

void transformUserAddressFormat {
//转化地址格式
}
}

就是说,Entity还是原本的概念,只不过Model是基于Entity的更高层的数据抽象与处理。

总结

说实话,Entity、Model,它们的职责到底是什么,真的不好说明白,大家也就做个参考吧=。=

参考

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器