### 1、什么是實體?
在我們進行系統構造的目標業務領域里,有一些對象,主要依賴外界進行管理或者處理,這些對象主要處在被加工或者處理的地位,這樣的對象我們稱之為實體對象,而這類對象以數據為住,一般只具有屬性(或者叫域),不包含或只包含少量的內生方法(主要是一些自我處理的方法,這些方法不會操作其它對象,不產生對其它外界對象的依賴,比如克隆,格式化等)。直白的講,實體就是數據性對象,結構體和類都可以用來描述它。實體類是允許嵌套的,即實體類的屬性也可以是另外的實體類型(本身也可)。與實體類相對應的就是操作類(業務類,數據處理類等)。
### 2、實體操作類
這里的操作類主要是指針對實體進行操作的類,這些操作類除了包含一些必要的用來指導操作方法的屬性外,一般都不包含數據性屬性。操作類包含的方法一般都是針對實體或者實體集合的。通常情況下,操作單個實體和操作實體集合的類會分開。操作單個實體的,比如格式顯示,反射賦值,反射取值;而針對實體集合的則主要是新增,修改,讀取,刪除,查詢,篩選,計數,統計等操作。實體操作類和業務處理類的區別就是實體操作類只針對實體類本身,不帶業務邏輯色彩。從數據庫的角度看,實體操作類就相當于數據庫的sql.
### 3、實體為何要與操作分離
實體代表數據,操作代表處理數據的方法,這種將實體和實體操作分離是面向對象編程下一個比較明智的改變,一方面因為面向對象只是分析和設計的一個視角,并不代表世界的全部,傳統的那種將數據和方法分離的模式(面向過程)還是有其優勢的,特別是在大規模數據處理方面。其二,實體類與實體的操作方法,特別是外界施加給實體的方法,從邏輯上來講也很難理解。我一直覺得,面向過程和面向對象并不是對立的,它們之間是對立和統一的,面向對象側重于整體和全局性,面向過程則注重局部與實現。
實體類和操作的分離的好處:
?? 1)便于存儲、運輸、共享和交換
一般情況下實體都是很簡單的東西,因為不帶有方法,而只有數據,因此便于存儲,運輸,共享和交互。有利于以XML格式進行處理。
2)便于操作復用
如果實體遵循一定的規則(大多時候用元屬性來描述),很多對實體的處理操作都可以通用方法。比如實體的增加,刪除,修改,查詢等。
3)便于與文件系統和數據庫系統的結合
我們知道文件系統和數據庫系統存放的主要是數據,而對于這些數據的處理都是外界附加的。實體與操作的分離,實體就非常適合與結構話的文件數據和數據庫數據進行
轉換,便于在內存中實施對這些數據的處理。
?? 4)以實體而不是單純的記錄來表示數據,可以很好的利用類的特性,來聚合數據,可以更好的從整體方面來對待這些對象,比如訂單實體,可以將表單頭和訂單明細數據作為整體來考慮。
不好的地方:
???? 1)因為實體只包含屬性,而不提供或者只提供少量的方法,使得原來可以封裝在實體對象內的方法,也必須由外部提供,而且實體必需全面暴露自己。從這個方面來看,站在面向對象的角度講,破壞了對象的封裝性。同時由于實體主要包含的是靜態特征,多態,繼承的作用不是很大(提供一定的接口屬性實現還是可以的)。其實這算不上不好的地方,有些事情沒必要進入“潔癖”狀態。
看到這里,大家或許會發現,實體與操作類的分離,有點數據庫的味道,實際上現在有些持久層框架在某種意義上來講,就是一個簡化的內存關系數據庫,比較典型的就是LINQToSQL,ADONetEntity Framework。
........
下一篇,主要講實體框架主要功能和一般架構,對于一些關鍵技術,會提供代碼實現。
同時也歡迎大家指正。