实体与模型的浅析

在日常开发过程中经常看到Entity,Model,DataModel,它们之间到底有什么异同?下面是我个人的一些理解。

一.Entity,Model,它们是什么?

维基百科描述:

实体(entity)是有可区别性且独立存在的某种事物,但它不需要是物质上的存在。尤其是抽象和法律拟制也通常被视为实体。

可见,实体就是软件系统中的研究对象。

比如:学生信息管理系统中,学生这一概念就是一个实体,它是我们软件系统的主要研究对象

数据模型(模型):

在软件工程中,数据模型是定义数据如何输入与输出的一种模型。其主要作用是为信息系统提供数据的定义和格式。数据模型是数据库系统的核心和基础,现有的数据库系统(此处所指数据库为关系数据库,非关系数据库常见的是键值对形式存储数据)都是基于某种数据模型而建立起来的。

可见数据模型这个概念更多出现在数据库系统中。它是为了把研究对象进行抽象,目的是要与数据库系统中的数据模型进行关系映射。

从实体概念可以得知,实体正是数据库系统的研究对象,所以,建模过程即为为实体进行抽象和定义,用一个数据模型对实体进行描述,此数据模型则为数据库系统提供数据支持。

把这些概念引入到计算机系统之后,在不同的业务层有着不同的体现。

二.计算机系统中的数据模型

对于数据访问(传输)层的数据模型,更多是用于定义数据交换的文档结构,即对数据交换文档进行抽象和定义。某一个模型对应某一份数据交换文档,JAVA程序设计中最常见的是JavaBean,.NET程序设计中最常见的是xxxModel,它们的作用都是相同的,即把数据交换文档使用对应的程序设计语进行定义,使得整个数据文档可以在本系统中方便的使用。需要注意的是,xxxBean和xxxModel的存在侧重于抽象建模,故常见的xxxBean和xxxModel中很少出现对数据的操作,所以我们常见的xxxBean定义中更多的是看到一些数据成员的定义,很少看到方法定义。

对于业务逻辑层的数据模型,更多是用于对系统操作对象进行抽象和封装。对于此层的数据模型而言最常见的是我们在传统软件开发过程中,通过UML建模得到的类定义。我们把系统业务进行了抽象,以类的形式对其进行描述,使得整个系统结构化,模块化,业务针对性强,并且在开发过程中更加易于修改和维护。通过各个类所生成的对象之间的相互协同工作,即可完成相关的业务需求。所以此层中的数据模型不但有类型(数据)的定义,更多的是操作(方法)的定义。因为模型内或者模型之间需要有所通讯(互操作)。这就是业务逻辑层的数据模型,它是系统详细设计的产物。

三.关于命名

Entity , Model , DataModel在开发过程中经常看到这三个命名,其实他们都是同一个概念,即数据模型的定义,是对实体抽象描述的产物。JAVA程序设计中数据访问层的数据模型一般以Bean结尾,表示它是一个JavaBean,而.NET中更多的是使用Model作为后缀,也有人以Entity作为后缀,这也就解释了为什么任何一个项目中都免不了看到这三个单词。数据访问层的数据模型对数据访问权限没有要求,甚至可以说,必须对外开放访问,所以常见的数据成员的数据访问修饰符都是public ;业务逻辑层更多是以实体本身命名,比如:Student,Blog等,它要求具有较强的封装性,不但封装变化,更要封装操作,所以对于Client而言某些数据是无法访问的。

四.总结

实体是设计时存在的概念,不应该出现在计算机系统的具体定义中,而数据模型则是计算机系统中的操作对象的抽象,他们本为一个概念 – 系统研究对象的抽象,只所处环境不同导致所有差异。

[计算机基础]关于实体( Entity )和模型( Model )的更多相关文章

  1. 实体entity、JavaBean、Model、POJO、domain的区别

    实体entity.JavaBean.Model.POJO.domain的区别Java Bean.POJO. Entity. VO , 其实都是java 对象,只不过用于不同场合罢了. 按照 Sprin ...

  2. ADO.NET实体框架Entity Framework模型-基于元数据解析

           上一篇简单介绍了EF的XML模型结构,在基于xml解析一文中,主要使用xml查询技术Xpath,XQuery来得到实体模型中相应信息的,由于这种方式在数据库庞大,表关系复杂的情况下,有诸 ...

  3. C#-MVC基础-模型(Model)、视图(View)和控制器(Controller)

    搜狗百科:http://baike.sogou.com/v25227.htm?fromTitle=MVC MVC全名是Model View Controller,是软件工程中的一种软件架构模式,把软件 ...

  4. Java面试题 Web+EJB & Spring+数据结构& 算法&计算机基础

    六.Web 部分:(共题:基础40 道,基础37 道,中等难度3 道) 122.说出Servlet 的生命周期,并说出Servlet 和CGI 的区别? [基础] 答:Web 容器加载Servlet ...

  5. How to: Use the Entity Framework Data Model Located in an External Assembly 如何:使用位于外部程序集中的EF数据模型

    If you have a non-XAF application, and want to develop an XAF application that utilizes the same dat ...

  6. 第二篇:Entity Framework CodeFirst & Model 映射

    前一篇 第一篇:Entity Framework 简介 我有讲到,ORM 最关键的 Mapping,也提到了最早实现Mapping的技术,就是 特性 + 反射,那Entity Framework 实现 ...

  7. 【再探backbone 01】模型-Model

    前言 点保存时候不注意发出来了,有需要的朋友将就看吧,还在更新...... 几个月前学习了一下backbone,这段时间也用了下,感觉之前对backbone的学习很是基础,前几天有个园友问我如何将路由 ...

  8. cesium编程入门(九)实体 Entity

    cesium编程入门(九)实体 Entity 在cesium编程入门(五)绘制形状提到过添加实体的方法,这一节聊一聊实体相关的一些内容: 先来看 Entity 的各个属性 id 唯一标志,如果没设置, ...

  9. Linux学习-计算机基础

    Linux 学习-计算机基础 一.描述计算机的组成及其功能. 计算机系统是由硬件(Hardware)和软件(Software )两部分组成. 硬件: 从硬件基本结构上来讲,计算机是由运算器.控制器.存 ...

随机推荐

  1. 06-OC分类、协议、ARC

    目录: 一.分类 二.扩展 三.协议 四.内存管理ARC 回到顶部 一.分类 1 分类就是类的补充和扩展,本质上是类的一部分,把一个类分成若干部分,每个部分就是分类. 2 语法 * 文件中的语法@in ...

  2. inet_addr() inet_ntoa() inet_pton inet_ntop sockaddr_in

    inet_addr() 简述:将一个点间隔地址转换成一个in_addr.#include <winsock.h>unsigned long PASCAL FAR inet_addr( co ...

  3. 如何判断是否安装了VC RUNTIME

    先得说下GUID,它是Globally Unique Identifier的简称,中文翻译为“全球唯一标示符”,在Windows系统中也称之为Class ID,缩写为CLSID.对于不同的应用程序,文 ...

  4. JS 2016-09-30T22:04:27.5220743+08:00 转换为日期

    1.转换代码 new Date(item.CreatedDate).Format("yyyy-MM-dd hh:mm") 2.需要拓展的方法 // 对Date的扩展,将 Date ...

  5. 用overflow-y 解决web页面抖动问题

    页面抖动(左右抖动)让人视觉上很不爽.. /** original : php攻城师 http://blog.csdn.net/phpgcs **/ 最开始我也以为是 layout 不一致的原因..后 ...

  6. 配置Eclipse使用外部Maven

    当集成Maven时,Eclipse会安装上一个内嵌的Maven, 这个内嵌的Maven通常会比较新,但不一定很稳定,而且往往也会和命令行使用的Maven不是同一个版本.这里又会出现两个潜在的问题:首先 ...

  7. 继承Application实现Android数据共享

         Application类 在Android中,启动一个应用,首先会初始化Application,然后再通过它检查AndroidManifest.xml清单文件,选择须要首先启动的Activi ...

  8. Study notes for B-tree and R-tree

    B-tree B-tree is a tree data structure that keeps data sorted and allows searches, sequential access ...

  9. java实现文件传输

    在windows下装了个linux虚拟机,两者之间传输文件挺麻烦的.写了个简单的文件传输程序,来方便自己数据传送. server 端: import java.io.BufferedReader;im ...

  10. MSSQL、C# 、Winform、ASP.NET - 数据库备份与还原模块

    数据库备份还原类: using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...