J2EE之巔

           

          分層模式中的常見問題

          引言
          分層結(jié)構(gòu)是目前復(fù)雜應(yīng)用系統(tǒng)開發(fā)時(shí)普遍使用的模式,軟件中層之間的依賴關(guān)系約束是比較寬松的,并不要求上層僅可以依賴于直接下層,而是上層可以依賴于它的所有下層。
          設(shè)計(jì)中我們會(huì)把各種系統(tǒng)的各種組件映射至不同層中,而在我所接觸的一些實(shí)際項(xiàng)目中設(shè)計(jì)人員在映射這種組件和層間的關(guān)系時(shí)經(jīng)常無意中破壞了層結(jié)構(gòu)的依賴關(guān)系約束。

           

          圖表 1 典型分層結(jié)構(gòu)

          設(shè)計(jì)中的常見問題
          問題一:數(shù)據(jù)傳輸對象(DTO)是否應(yīng)該屬于業(yè)務(wù)層?
          在J2EE開發(fā)的經(jīng)典著作《Core J2EE Patterns》中數(shù)據(jù)傳輸對象被劃分在業(yè)務(wù)層模式中,那么是否數(shù)據(jù)傳輸對象應(yīng)該被映射到業(yè)務(wù)層呢?
          數(shù)據(jù)訪問對象(DAO)在該著作中是被映射到整合層的,這樣就會(huì)出現(xiàn)一個(gè)違反層依賴約束的問題,因?yàn)閿?shù)據(jù)訪問對象是要依賴于數(shù)據(jù)傳輸對象的,因此下層就會(huì)出現(xiàn)對上層的依賴了。
          所以本人認(rèn)為DTO是在各層中傳輸數(shù)據(jù)的,我們可以不必強(qiáng)求的把他們映射到上述層次中,可以把他們放置在一個(gè)公共包中。
           
          問題二:使用POJO作業(yè)務(wù)對象的輕量級架構(gòu)與上述層模型的映射
          在使用POJO的輕量級結(jié)構(gòu)中我們通常會(huì)使用持久化框架(如Hibernate/JPA)同時(shí)會(huì)在架構(gòu)中引入倉庫對象(Repository Object),負(fù)責(zé)業(yè)務(wù)對象的獲取和保存。(注意:他的功能和DAO是有區(qū)別的,倉庫對象中通常只應(yīng)包括業(yè)務(wù)對象的獲取和保存邏輯)。
          通常設(shè)計(jì)人員會(huì)把業(yè)務(wù)對象映射至業(yè)務(wù)層,而將倉庫對象映射至整合層。由于倉庫對象對于業(yè)務(wù)對象的依賴關(guān)系就會(huì)破壞依賴關(guān)系約束,所以這種映射方式顯然不正確。
          下圖是作者推薦的映射方式

           

          圖表 2 輕量級架構(gòu)參考模型

           
          可以看到業(yè)務(wù)對象和倉庫對象都被映射至業(yè)務(wù)層,而持久化框架被映射到了整合層。
           
          總結(jié)

          因此大家在設(shè)計(jì)過程中不要僅僅將分層結(jié)構(gòu)留于形式,而要時(shí)刻注意設(shè)計(jì)是否符合這種架構(gòu)模式,這樣才能真正發(fā)揮這種架構(gòu)模式的優(yōu)勢。

           

          蔡超
          http://dev2dev.bea.com.cn/blog/chaocai/200803/architecture_16_942.html
          JavaEE 咨詢顧問
          SCEA (1.2&5.0)
          IBM Certified Solution Designer for OOA&D UML2

          posted on 2008-03-19 21:48 超越巔峰 閱讀(1258) 評論(0)  編輯  收藏 所屬分類: Design PatternJava EE

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(12)

          隨筆分類(54)

          隨筆檔案(59)

          文章分類(2)

          文章檔案(1)

          相冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 英超| 翼城县| 鄂托克旗| 读书| 瓮安县| 南汇区| 麻江县| 陆川县| 遂溪县| 峨山| 寻乌县| 淅川县| 突泉县| 定陶县| 马关县| 化德县| 怀柔区| 锦州市| 邹城市| 夏河县| 轮台县| 延长县| 巧家县| 思南县| 惠州市| 文化| 长沙市| 绥芬河市| 辽源市| 精河县| 吉林省| 达日县| 施秉县| 苗栗县| 淄博市| 西昌市| 清水河县| 永泰县| 田林县| 满城县| 临沭县|