### 1、什么是实体?
在我们进行系统构造的目标业务领域里,有一些对象,主要依赖外界进行管理或者处理,这些对象主要处在被加工或者处理的地位,这样的对象我们称之为实体对象,而这类对象以数据为住,一般只具有属性(或者叫域),不包含或只包含少量的内生方法(主要是一些自我处理的方法,这些方法不会操作其它对象,不产生对其它外界对象的依赖,比如克隆,格式化等)。直白的讲,实体就是数据性对象,结构体和类都可以用来描述它。实体类是允许嵌套的,即实体类的属性也可以是另外的实体类型(本身也可)。与实体类相对应的就是操作类(业务类,数据处理类等)。
### 2、实体操作类
这里的操作类主要是指针对实体进行操作的类,这些操作类除了包含一些必要的用来指导操作方法的属性外,一般都不包含数据性属性。操作类包含的方法一般都是针对实体或者实体集合的。通常情况下,操作单个实体和操作实体集合的类会分开。操作单个实体的,比如格式显示,反射赋值,反射取值;而针对实体集合的则主要是新增,修改,读取,删除,查询,筛选,计数,统计等操作。实体操作类和业务处理类的区别就是实体操作类只针对实体类本身,不带业务逻辑色彩。从数据库的角度看,实体操作类就相当于数据库的sql.
### 3、实体为何要与操作分离
实体代表数据,操作代表处理数据的方法,这种将实体和实体操作分离是面向对象编程下一个比较明智的改变,一方面因为面向对象只是分析和设计的一个视角,并不代表世界的全部,传统的那种将数据和方法分离的模式(面向过程)还是有其优势的,特别是在大规模数据处理方面。其二,实体类与实体的操作方法,特别是外界施加给实体的方法,从逻辑上来讲也很难理解。我一直觉得,面向过程和面向对象并不是对立的,它们之间是对立和统一的,面向对象侧重于整体和全局性,面向过程则注重局部与实现。
实体类和操作的分离的好处:
1)便于存储、运输、共享和交换
一般情况下实体都是很简单的东西,因为不带有方法,而只有数据,因此便于存储,运输,共享和交互。有利于以XML格式进行处理。
2)便于操作复用
如果实体遵循一定的规则(大多时候用元属性来描述),很多对实体的处理操作都可以通用方法。比如实体的增加,删除,修改,查询等。
3)便于与文件系统和数据库系统的结合
我们知道文件系统和数据库系统存放的主要是数据,而对于这些数据的处理都是外界附加的。实体与操作的分离,实体就非常适合与结构话的文件数据和数据库数据进行
转换,便于在内存中实施对这些数据的处理。
4)以实体而不是单纯的记录来表示数据,可以很好的利用类的特性,来聚合数据,可以更好的从整体方面来对待这些对象,比如订单实体,可以将表单头和订单明细数据作为整体来考虑。
不好的地方:
1)因为实体只包含属性,而不提供或者只提供少量的方法,使得原来可以封装在实体对象内的方法,也必须由外部提供,而且实体必需全面暴露自己。从这个方面来看,站在面向对象的角度讲,破坏了对象的封装性。同时由于实体主要包含的是静态特征,多态,继承的作用不是很大(提供一定的接口属性实现还是可以的)。其实这算不上不好的地方,有些事情没必要进入“洁癖”状态。
看到这里,大家或许会发现,实体与操作类的分离,有点数据库的味道,实际上现在有些持久层框架在某种意义上来讲,就是一个简化的内存关系数据库,比较典型的就是LINQToSQL,ADONetEntity Framework。
........
下一篇,主要讲实体框架主要功能和一般架构,对于一些关键技术,会提供代码实现。
同时也欢迎大家指正。