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