亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区

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

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

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

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

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

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

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


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

考慮這么一個層次:
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. }  

這樣作的問題是與建立貧血對象模型相比,領域?qū)ο竽P偷男袨橥ㄓ眯枰猄erviceLayer來完成,約定:
1)ServiceLayer層只負責實現(xiàn)簡單的單步驟的與底層數(shù)據(jù)庫訪問的 邏輯,不包含任何業(yè)務領域邏輯。 如上面的 service.save(),service.update, service.delete , service.findGroupByName.... 

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

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

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

安徽新華電腦學校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区
国产精品自拍视频| 日韩精品第1页| 精品国产欧美成人夜夜嗨| 国产精品一区免费观看| 国产在线视频2019最新视频| 免费国产成人看片在线| 男人的天堂狠狠干| 激情视频综合网| 欧美日韩亚洲第一| 国模精品视频一区二区| 国产一级片91| 国产乱肥老妇国产一区二 | 日韩和欧美的一区二区| 日本高清不卡在线| 日本成人精品在线| 欧美在线视频一二三| 欧美日韩国产综合视频在线| 黑人中文字幕一区二区三区| 免费h精品视频在线播放| 免费久久99精品国产自| 国产日韩精品一区二区| 成人精品久久一区二区三区| 国产精品99久久久久久人 | 99精彩视频| 国产成人精品国内自产拍免费看| 久久久综合香蕉尹人综合网| 亚洲 日韩 国产第一| 日本a在线免费观看| 青青草国产免费| 免费国产一区二区| www.亚洲一区二区| 久久久久久亚洲精品不卡4k岛国| 久久久精品国产网站| 精品国产一区二区三区无码| 亚洲自拍欧美色图| 日韩极品视频在线观看| 国产三区二区一区久久| 91精品国产乱码久久久久久久久 | 久久综合色影院| 亚洲乱码一区二区三区| 欧美极品色图| 97国产在线播放| 国产精品美女久久久久av超清| 亚洲熟妇无码一区二区三区导航| 欧美亚州在线观看| 国产精品99蜜臀久久不卡二区| 国产精品日日做人人爱| 亚洲精品国产精品国自产观看| 欧美亚洲视频在线观看| 99久久精品久久久久久ai换脸| 日韩有码在线电影| 亚洲最新在线| 欧美性视频在线播放| 国产内射老熟女aaaa | 91精品国产免费久久久久久| 国产精品视频999| 久久国产精品首页| 欧美亚洲精品日韩| 国产精品一区视频网站| 久久精品久久精品国产大片| 国产精品免费视频xxxx| 国产精品极品美女在线观看免费| 久久伊人91精品综合网站| 亚洲美女网站18| 欧美乱大交xxxxx潮喷l头像| av在线亚洲男人的天堂| 久久亚洲a v| 国产精品美女999| 天堂а√在线中文在线| 国内精品在线一区| 国产成+人+综合+亚洲欧美丁香花| 国产精品免费在线播放| 夜夜添无码一区二区三区| 日韩男女性生活视频| 国产精品一区久久| 日韩在线视频网站| 亚洲一区二区三区精品在线观看 | 欧美一二三视频| 91久久精品视频| 久久精品国产免费观看| 国产精品第二页| 日韩欧美精品一区二区| 国产精品一区视频| 久久久久久网址| 精品免费日产一区一区三区免费 | 国产嫩草一区二区三区在线观看| 国产精品69久久久| 日韩中文字幕免费看| 大地资源第二页在线观看高清版| 美女一区视频| 日韩在线中文视频| 欧美一级免费看| y111111国产精品久久婷婷| 国产精品无码乱伦| 日本电影亚洲天堂| 国产精成人品localhost| 国产精品99蜜臀久久不卡二区| 九九热在线精品视频| 精品日本一区二区三区在线观看| www.中文字幕在线| 最新欧美日韩亚洲| 国产一区 在线播放| 深夜福利国产精品| 日本国产在线播放| 久久伊人资源站| 亚洲精品免费在线视频| 国产精品自产拍高潮在线观看| 国产高清视频一区三区| 动漫一区二区在线| 91精品国自产在线观看| 亚洲精品欧美精品| 国产精品99久久久久久久| 欧美激情视频网| 国产欧美一区二区三区视频| 国产精品无码乱伦| 精品日本一区二区三区在线观看| 久久久精品国产网站| 欧美在线观看黄| 国产精品第12页| 国内久久久精品| 精品伦精品一区二区三区视频| 国内精品视频在线| 久久亚洲综合国产精品99麻豆精品福利 | 国产精品旅馆在线| 欧美h视频在线| 久久久91精品国产| 免费看污污视频| 久久91精品国产91久久跳| 国产日韩亚洲精品| 国产精品久久久久久久久免费看| 欧美精品一区二区三区久久| 国产精品美乳在线观看| 国产一区二区免费在线观看| 一区不卡视频| 国产不卡一区二区三区在线观看| 日韩尤物视频| 久久久久久久久久久亚洲| 国产素人在线观看| 精品国产第一页| 91国产一区在线| 日韩国产精品一区二区| 精品国产91亚洲一区二区三区www| 丰满爆乳一区二区三区| 色999五月色| 国产精品久久久久9999小说| 国产免费一区二区三区视频| 亚洲精品久久久久久一区二区| 国产www免费| 蜜桃日韩视频| 视频一区二区在线观看| 69精品丰满人妻无码视频a片| 男人天堂成人在线| 亚洲一区二区三区乱码aⅴ| 91国自产精品中文字幕亚洲| 欧美污视频久久久| 精品久久久久久一区二区里番 | 久热99视频在线观看| 国产精品一区二区欧美| 日韩在线三级| 久久精品成人欧美大片| 久久亚洲免费| 国产日韩中文字幕在线| 日韩av大片免费看| 国产精品久久久久久久久借妻 | 人妻无码一区二区三区四区| 亚洲成人第一| 国产精品久久久久久久久婷婷 | 欧美精品中文字幕一区二区| 国产精品久久久久久久久久免费| av在线亚洲男人的天堂| 欧美日韩亚洲免费| 色乱码一区二区三在线看| 国产精品秘入口18禁麻豆免会员| 91av在线不卡| 激情伊人五月天| 日本在线视频www色| 欧美激情网友自拍| 久久视频在线观看免费| 国产精品一区久久| 欧美乱大交xxxxx潮喷l头像| 亚州成人av在线| 欧美激情免费在线| 国产精品成人品| 久久久精品一区| 国产精品69页| 91精品免费| 国产美女作爱全过程免费视频| 青青草视频在线免费播放| 中文字幕一区二区三区精彩视频| 国产精品欧美日韩久久| 久久99精品久久久久久秒播放器 | 91精品久久久久久蜜桃| 国产综合欧美在线看| 欧美亚洲另类制服自拍| 亚洲高潮无码久久| 亚洲欧洲精品在线观看| 欧美激情一区二区三级高清视频| 国产精品区二区三区日本| 丝袜一区二区三区| 68精品国产免费久久久久久婷婷|