国产精品一区二区精品_久久小视频_天堂va在线观看_99久久夜色精品国产亚洲96_日本手机在线视频_av成人免费

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 談一談貧血的Domain Logic問題。

談一談貧血的Domain Logic問題。
2010-01-14 22:28:10  作者:  來源:
如今采用Hibernate實現的Domain Model,多數只是維護實體之間的關聯,而大多數的業務邏輯,則是由Service Layer來實現。

這樣的模型對象擁有的行為太少了,以至于Martin Fowler給他們下了一個定義:貧血模型。

我們知道,高內聚低耦合是衡量一個模型設計是否合理的重要標準之一。對象組件間合理分工協作可以解決復雜的問題邏輯,按照這個標準,我們似乎可以很自然的各種行為封裝到各個模型對象中。 然而,現在絕大多數的應用沒有這樣做。

ORM作為模型對象與數據庫模型之間的接口,它的引入無疑承擔了實體領域模型所能稱之為領域模型的 所有責任。 正如同Martin Fowler所說的,貧血的領域模型承擔了領域模型的所有成本,卻沒有得到真正的收益。
在這里,真正的收益應該是指高內聚低耦合的擁有復雜對象行為的領域模型,確實,我們設計的領域模型根本沒有實現任何的功能,我們只能在外面從新設計一個 Service Layer來管理所有的行為。

我不敢評論這樣的設計方案是怎樣的不合理。 當設計到擁有比較復雜問題領域模型的時候,這種只負責管理實體間關聯關系的實體模型肯定不能適應,這樣做的后果就是將復雜領域邏輯統統 移植到 Service Layer層或者胡亂給起名字的一個外層。

考慮Martin Fowler 《Analysis Patterns》中著名的一個通用模型:團體責任模型。里面的約束需要在實體領域模型中得以實現,在貧血領域模型中,封裝實現這樣的需要檢索 驗證某個甚至全部實體數據的行為只能移植到Service Layer中。 這樣的移植對于領域模型的構架無疑大大增加了復雜度。


那么,我們能不能在貧血領域模型基礎上,加入對象行為,使之擁有豐富的行為呢? 我想這是可以解決的,解決的關鍵是將可訪問底層實體數據的行為賦予每一個實體模型對象,最簡便的辦法就是用一個全局訪問點來實現。

考慮這么一個層次:
Java代碼 復制代碼
  1. public interface ServiceProvider{   
  2.                 public Object getService(String serviceName);;   
  3.           
  4. }   
  5.   
  6.   
  7. public ServiceProviderImpl{   
  8.               public ObjectgetService(String serviceName);{   
  9.                 
  10.                     return ServiceLocator.getService(serbiceName  );;   
  11.              }   
  12.                   
  13. }   
  14.   
  15. public interface CRUD{   
  16.      public void save();;   
  17.       public void delete();;   
  18.        public void load(Long id);;   
  19.       public void update();;   
  20. }   
  21.   
  22. public Group implements CRUD {   
  23.   
  24.     private String name;   
  25.      private List  users;   
  26.       public GroupService getGroupService();{   
  27.            return (GroupService);getServiceProvider();.getService(this.class.getName();+"Service");   
  28.       }   
  29.      public void save();{   
  30.           if(getGroupService();.findGroupByName(name);!=null);   
  31.                        throw new RuntimeExepion("duplicate group name!");;   
  32.           getGroupService();.save(this);;   
  33.       }   
  34.       public  Group load(Long id);{   
  35.            this=getGroupService();.load(this.class,id);;   
  36.            return this;   
  37.       }   
  38.          
  39.      public void addUser(user user);{   
  40.                 
  41.             users.add(user);;   
  42.             this.save();;    
  43.         
  44.     }   
  45.      public void removeUser(User user);{   
  46.      }   
  47.   
  48.         
  49.   
  50. }  

這樣作的問題是與建立貧血對象模型相比,領域對象模型的行為通用需要ServiceLayer來完成,約定:
1)ServiceLayer層只負責實現簡單的單步驟的與底層數據庫訪問的 邏輯,不包含任何業務領域邏輯。 如上面的 service.save(),service.update, service.delete , service.findGroupByName.... 

2) 領域模型對象負責對自身的領域邏輯進行封裝。

3)通過賦予模型對象行為,建立對象間行為關聯,以完成更復雜的 商業邏輯。

4)外層業務邏輯層只能看到領域模型對象,不能直接操作任何的類似Service.save這樣的直接訪問底層數據庫的行為。

安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
国产精品一区二区精品_久久小视频_天堂va在线观看_99久久夜色精品国产亚洲96_日本手机在线视频_av成人免费
<button id="0mgmq"><pre id="0mgmq"></pre></button>
  • <tr id="0mgmq"></tr>
  • <abbr id="0mgmq"><source id="0mgmq"></source></abbr> <button id="0mgmq"></button>
  • 一本一本a久久| 免费久久久一本精品久久区| 国产精品永久入口久久久| 伊甸园精品99久久久久久| 欧美日韩在线一二三| 91久久国产自产拍夜夜嗨| 9国产精品视频| 欧美第一黄网| 操一操视频一区| 97超级碰碰| 97人人香蕉| aa成人免费视频| 99re在线国产| 豆国产97在线| 国产精品theporn88| 99国产超薄丝袜足j在线观看 | 激情综合电影网| 伊人精品视频| 亚洲精品人人| 在线综合欧美| 性欧美videos另类喷潮| 国产精品试看| 国产毛片久久| 亚洲欧美日韩精品综合在线观看| 99xxxx成人网| 亚洲在线日韩| 成人看片视频| 欧美激情视频一区二区三区| 欧美精品一区二区视频| 久久青青草原| 在线成人av电影| 欧美国产三级| 国产日韩欧美一区二区| 久久一区中文字幕| 精品久久久久亚洲| 欧美日韩最好看的视频| 亚洲国产欧美一区二区三区不卡| 在线精品亚洲一区二区| 精品成人在线| 久久中文在线| 久久99国产精品99久久| 先锋影音一区二区三区| 欧美日韩精品综合| 先锋影音一区二区三区| 国产精品久久亚洲7777| 视频一区二区综合| 一本色道久久综合亚洲精品不卡 | 欧美精品大片| 麻豆久久精品| 欧美一区二区三区在线播放 | 日韩偷拍一区二区| 国自产拍偷拍福利精品免费一 | 国产一区再线| 97超碰在线播放| 日韩高清国产精品| av成人毛片| 久久久久久a亚洲欧洲aⅴ| 中文字幕一区二区三区四区五区六区 | 免费精品视频一区| 国产一区二区三区无遮挡| 久久综合福利| 中文字幕日韩一区二区三区 | 欧美成人首页| 3d动漫啪啪精品一区二区免费| 欧美日韩精品久久久免费观看| 国内自拍一区| 国严精品久久久久久亚洲影视| 欧美不卡高清| 成人av影视在线| 欧美日韩调教| 成人av中文| 狠狠干综合网| 欧美日韩大片一区二区三区| 亚洲高清毛片| 先锋影音欧美| 国产区一区二区| 亚洲福利电影| 午夜视频久久久| 成人av播放| 一区二区日本视频| 视频在线观看成人| 国产精品日韩欧美一区二区| 亚洲国产精品第一区二区| 欧美精品中文字幕一区二区| 久久久久成人精品免费播放动漫| 欧美成人亚洲| 日本一区免费观看| 国产91亚洲精品一区二区三区| 激情欧美日韩| 在线观看一区欧美| 欧美日韩电影一区二区三区| 99久久99| 5566av亚洲| 亚洲欧美日韩国产综合精品二区| 欧美福利一区二区三区| 日韩高清av电影| 国产在线精品一区二区三区| 久久久福利视频| 国产精品美女久久久| 好看的亚洲午夜视频在线| 亚洲国产另类久久久精品极度| 久久精品一二三区| 国产精品视频福利| 看欧美日韩国产| 久久精品国产99精品国产亚洲性色| 亚洲国产欧洲综合997久久| 正在播放一区| 午夜日韩av| 午夜亚洲福利| 欧美日韩四区| 国色天香一区二区| 欧美高清日韩| 国产精品v一区二区三区| 亚洲欧美综合| 亚洲无线视频| 亚洲国产日韩欧美| 妖精视频成人观看www| 日韩视频在线一区二区三区| 日韩天堂av| 欧美亚洲专区| 999日本视频| 好吊色欧美一区二区三区视频| 国产自产精品| 色狠狠久久av五月综合| 婷婷四月色综合| 欧美aa国产视频| 黄色国产精品| 噜噜噜91成人网| 国产99视频精品免费视频36| 国产精品久久国产三级国电话系列| av一区观看| 激情小说网站亚洲综合网 | 9色国产精品| 久久久噜噜噜| 麻豆av一区二区三区久久| 日韩福利视频| 精品999成人| 久久精品国语| 欧美视频观看一区| 欧美精品七区| 久久精品国语| 日韩免费av电影| 国产综合视频| 91免费版网站在线观看| 欧美日韩免费精品| 亚洲视频综合| 91视频在线免费观看| 欧美精品中文字幕一区二区| 欧美激情91| 波多野结衣成人在线| 亚洲激情啪啪| 欧美一区二区| 亚洲图片都市激情| 亚洲一级特黄| 国产精品亚洲综合| 亚洲午夜久久久影院伊人| 亚洲人成免费| 免费成人深夜夜行视频| 国语精品中文字幕| 国产精品一区二区欧美| 欧美精品啪啪| 国产一区二区三区色淫影院 | 亚洲精品国产系列| 一区二区三区欧美成人| 久久精品午夜一区二区福利| 在线看片日韩| 麻豆91蜜桃| 国产私拍一区| 亚洲精品在线视频观看| 久久久精品国产一区二区三区| 四虎影视永久免费在线观看一区二区三区 | 国产精品日韩一区二区| 欧美日韩无遮挡| 久久99精品久久久久久久青青日本 | 久久精品国产美女| 亚洲精品美女| 日韩精品一区二区三区色偷偷 | 天天综合狠狠精品| 97中文在线| 亚洲精品视频一区二区三区| 日韩国产一区久久| 久久精品1区| 91久久黄色| 一区精品在线| 久久久久成人精品免费播放动漫| 国产区二精品视| 欧美精品三区| 神马影院一区二区三区| 国产精品露出视频| 母乳一区在线观看| 亚洲国产精品www| 欧美 日韩 国产精品免费观看| 精品欧美日韩在线| 国产成人精品免费视频大全最热| 亚洲免费播放| 欧美二区在线| 在线丝袜欧美日韩制服| 欧美精品一区在线发布| 极品尤物一区二区三区| 久久青青草综合|