隨筆-14  評論-25  文章-1  trackbacks-0

          原文地址:http://www.cnblogs.com/idior/archive/2005/07/04/186086.html

          近日?有關o/r?m的討論突然多了起來.?在這里覺得有必要澄清一些概念,?免的大家討論來討論去,?才發現最根本的理解有問題.

          1.?何謂實體?
          實體(類似于j2ee中的Entity?Bean)通常指一個承載數據的對象,?但是注意它也是可以有行為的!?只不過它的行為一般只操作自身的數據.?比如下面這個例子:


          class?Person
          {
          ??string?firstName;
          ??string?lastName;

          ??public?void?GetName()
          ??{
          ?????return??lastName+firstName;
          ??}???
          }


          GetName就是它的一個行為.

          2?何謂對象?
          對象最重要的特性在于它擁有行為.?僅僅擁有數據,你可以稱它為對象,?但是它卻失去它最重要的靈魂.?


          class?Person
          {
          ??string?firstName;
          ??string?lastName;
          ??Role?role;
          ??int?baseWage;
          ??public?void?GetSalary()
          ??{
          ?????return?baseWage*role.GetFactory();
          ??}???
          }

          這樣需要和別的對象(不是Value?Object)打交道的對象,我就不再稱其為實體.?領域模型就是指由這些具有業務邏輯的對象構成的模型.

          3.?E/R?M?or?O/R?M?!!
          仔細想想我們為什么需要o/r?m,無非是想利用oo的多態來處理復雜的業務邏輯,?而不是靠一堆的if?else.?
          而現在在很多人的手上o/r?m全變成了e/r?m.他們不考慮對象的行為,?而全關注于如何保存數據.這樣也難怪他們會產生將CRUD這些操作放入對象中的念頭.?如果你不能深刻理解oo,?那么我不推薦你使用o/r?m,?Table?Gateway,?Row?Gateway才是你想要的東西.


          作為一個O/R?M框架,很重要的一點就是實現映射的透明性(Transparent),比較顯著的特點就是在代碼中我們是看不到SQL語句的(框架自動生成了)。這里所指的O/R?M就是類似于此的框架,

          4.?POEAA中的相關概念
          ??很多次發現有人錯用其中的概念,?這里順便總結一下:
          ??1.?Table?Gateway
          ????以表為單位的實體,基本沒有行為,只有CRUD操作.
          ??2.?Row?Gateway
          ????以行為單位的實體,基本沒有行為,只有CRUD操作.
          ??3.?Active?Record
          ????以行為單位的實體,擁有一些基本的操作自身數據的行為(如上例中的GetName),同時包含有CRUD操作.
          其實Active?Record最符合某些簡單的需求,?接近于E/R?m.
          通常也有很多人把它當作O/R?m.不過需要注意的是Active?Record中是充滿了SQL語句的(不像orm的SQL透明),?所以有人想起來利用O/R?m來實現"Active?Record",?雖然在他們眼里看起來很方便,?其實根本就是返祖.
          用CodeGenerator來實現Active?Record也許是一個比較好的方法.
          ??4.?Data?Mapper
          這才是真正的O/R?m,Hibernate等等工具的目標.

          5.O/R?M需要關注的地方?(希望大家幫忙完善一下)
          ?1.?關聯,?O/R?M是如何管理類之間的關聯.當然這不僅于o/r?m有關與設計者的設計水平也有很大關系.
          ?2.?O/R?M對繼承關系的處理.
          ?3.?O/R?M對事務的支持.
          ?4.?O/R?M對查詢的支持.
          ?
          以上觀點僅屬個人意見,?不過在大家討論有關O/R?m之前,?希望先就一些基本概念達成共識,?不然討論下去會越離越遠.?


          (建議:?如果對oo以及dp沒有一定程度的了解,?最好別使用o/r?m,?dataset?加上codesmith或許是更好的選擇)
          posted on 2006-05-30 13:20 混沌中立 閱讀(380) 評論(0)  編輯  收藏 所屬分類: about java & j2ee
          主站蜘蛛池模板: 昆明市| 顺义区| 达孜县| 始兴县| 日照市| 吉隆县| 四平市| 凌源市| 西峡县| 常山县| 炎陵县| 上栗县| 武陟县| 远安县| 桑植县| 江永县| 巴林左旗| 牙克石市| 镇远县| 会同县| 海林市| 凤冈县| 怀宁县| 平武县| 如东县| 阿图什市| 南昌县| 奈曼旗| 涞源县| 大关县| 德清县| 永兴县| 林芝县| 迭部县| 龙海市| 漯河市| 永康市| 邓州市| 星子县| 和林格尔县| 嘉义县|