惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
N
News and Events Feed by Topic
Recent Announcements
Recent Announcements
D
Docker
M
MIT News - Artificial intelligence
L
LangChain Blog
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
博客园_首页
MongoDB | Blog
MongoDB | Blog
美团技术团队
S
Schneier on Security
G
GRAHAM CLULEY
月光博客
月光博客
有赞技术团队
有赞技术团队
Vercel News
Vercel News
Scott Helme
Scott Helme
P
Privacy International News Feed
Last Week in AI
Last Week in AI
Recorded Future
Recorded Future
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
Attack and Defense Labs
Attack and Defense Labs
Google Online Security Blog
Google Online Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
量子位
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
Visual Studio Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
NISL@THU
NISL@THU
N
Netflix TechBlog - Medium
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
罗磊的独立博客
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threatpost
L
Lohrmann on Cybersecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Security Affairs
Cloudbric
Cloudbric
爱范儿
爱范儿
H
Heimdal Security Blog
PCI Perspectives
PCI Perspectives

土土哥的Blog

好久没有更新博客=。= 阿里巴巴国际无线技术部 - 招人啦~求iOS、Android、Java 转-阿里巴巴国际无线技术部 - 在这里遇见最好的自己 反编译分析并模拟实现methodSignatureForSelector方法 反编译分析Xcode8的Bug, release下连续两次调用有二级指针参数的空方法会Crash 有趣的Autolayout示例5-Masonry实现 在对象dealloc的后期执行Task-开源库TTGDeallocTaskHelper 用QuartzCode快速实现一个收藏动画 开源项目-拼图验证控件TTGPuzzleVerify的实现 Swift开源Mac App - BingWallPaper 有趣的Autolayout示例4-Masonry实现 翻译-为什么objc_msgSend必须用汇编实现 API返回结果设计经验与总结 结合访问Out Parameters出现EXC_BAD_ACCESS的例子,反编译汇编解读__autoreleasing 总结一些iOS项目中组织代码的方法 对组件化与模块化的思考与总结 开源项目-TTGTagCollectionView 有趣的Autolayout示例3-Masonry实现 Swift开源项目: TTGEmojiRate的实现 Swift写的库-TTGSnackbar 有趣的Autolayout示例2-Masonry实现 解决iOS项目的版本兼容问题-结合宏、Category和Runtime 用Runtime的手段填充任意NSObject对象的nil属性 有趣的Autolayout示例-Masonry实现 UITextView编辑时插入自定义表情-续-自定义表情图片的大小 RPC框架Thrift例子-PHP调用C++后端程序 GCD使用经验与技巧浅谈 为GCD队列绑定NSObject类型上下文数据-利用__bridge_retained(transfer)转移内存管理权 Enum-枚举的正确使用-Effective-Objective-C-读书笔记-Item-5 @autoreleasepool-内存的分配与释放 有关宏定义的经验与技巧-简化代码-增强Log Effective-Objective-C-读书笔记-Item-4-如何正确定义常量 UITextView编辑时插入自定义表情-简单的图文混编 关于评论不见了=。= 一次审核被拒的经历-关于iCloud到底应该备份什么数据 Block类型变量-缓存Http请求与回调 提升UITableView性能-复杂页面的优化 NSString的Copy与内存分配 利用NSProxy实现消息转发-模块化的网络接口层设计-原创 Effective-Objective-C-读书笔记-Item-3 Effective-Objective-C-读书笔记-Item-2 Effective-Objective-C-读书笔记-Item-1 iOS项目的目录结构-原创 Android开源库-LinkTextView-原创 第一篇Blog
Entity和Model的不同-关于代码的数据层
土土哥 · 2015-03-01 · via 土土哥的Blog

前言

经常都能在一些博客、文档中看到“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



class UserEntity {
public String name;
public int age;
public String address;
}


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,它们的职责到底是什么,真的不好说明白,大家也就做个参考吧=。=

参考