第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

多層構(gòu)架在實(shí)踐中一些問(wèn)題

多層構(gòu)架在實(shí)踐中一些問(wèn)題

猛跑小豬 2019-03-13 17:18:20
最近要開(kāi)始一個(gè)新項(xiàng)目,上一個(gè)項(xiàng)目采用貧血的多層構(gòu)架,感覺(jué)IDao,IService大多數(shù)都無(wú)用,雖然有IDE輔助但是仍然很痛苦,想請(qǐng)教一下大家在實(shí)踐中是怎么使用多層構(gòu)架的。DAO層是否有必要存在?畢竟對(duì)于一個(gè)電商網(wǎng)站你不太可能將數(shù)據(jù)序列化到文件吧,而且采用Redis等內(nèi)存數(shù)據(jù)庫(kù)也要特殊處理吧,不會(huì)直接替換一個(gè)DAO實(shí)現(xiàn)了事吧。如果只是作為關(guān)系數(shù)據(jù)庫(kù)的封裝,ORM也已經(jīng)封裝的不錯(cuò)了,Java中的常用的ORM也就Hibernate和ibatis一般根據(jù)人員學(xué)習(xí)成本相比中途也不會(huì)無(wú)痛切換吧。Service層什么情況下才需要有不同的實(shí)現(xiàn)類(lèi)?Service不過(guò)是作為一些代理和跨dao,entity的調(diào)用,直接替換不同DAO實(shí)現(xiàn)來(lái)更換持久化方案我能理解,但是什么情況下才需要替換Service的具體實(shí)現(xiàn)呢?開(kāi)始時(shí)接口是否有必要存在?開(kāi)始就采用接口基本就要兩個(gè)文件來(lái)回跳來(lái)跳去,如果開(kāi)始時(shí)候就直接使用實(shí)現(xiàn)類(lèi)直到需要時(shí)在引入接口成本是否會(huì)很高?畢竟只是聲明類(lèi)型變了,業(yè)務(wù)邏輯沒(méi)變。(該問(wèn)題已有同學(xué)回答,參見(jiàn)每一個(gè)類(lèi)都應(yīng)該有一個(gè)接口嗎?)引用別人對(duì)貧血模型和充血模型的總結(jié)(沒(méi)記錯(cuò)的話(huà)應(yīng)該是javaeye的robbin總結(jié)的):對(duì)于Java來(lái)說(shuō),更加適合采用貧血的模型,Java比較適合于把一個(gè)復(fù)雜的業(yè)務(wù)邏輯分離到n個(gè)小對(duì)象中去,每個(gè)小對(duì)象描述單一的職責(zé),n個(gè)對(duì)象 互相協(xié)作來(lái)表達(dá)一個(gè)復(fù)雜的業(yè)務(wù)邏輯,這n個(gè)對(duì)象之間的依賴(lài)和協(xié)作需要通過(guò)外部的容器例如IoC來(lái)顯式的管理。但對(duì)于每個(gè)具體的對(duì)象來(lái)說(shuō),他們毫無(wú)疑問(wèn)是貧 血的。這種貧血的模型好處是:1、每個(gè)貧血對(duì)象職責(zé)單一,所以模塊解藕程度很高,有利于錯(cuò)誤的隔離。2、非常重要的是,這種模型非常適合于軟件外包和大規(guī)模軟件團(tuán)隊(duì)的協(xié)作。每個(gè)編程個(gè)體只需要負(fù)責(zé)單一職責(zé)的小對(duì)象模塊編寫(xiě),不會(huì)互相影響。貧血模型的壞處是:1、由于對(duì)象狀態(tài)和行為分離,所以一個(gè)完整的業(yè)務(wù)邏輯的描述不能夠在一個(gè)類(lèi)當(dāng)中完成,而是一組互相協(xié)作的類(lèi)共同完成的。因此可復(fù)用的顆粒度比較 小,代碼量膨脹的很厲害,最重要的是業(yè)務(wù)邏輯的描述能力比較差,一個(gè)稍微復(fù)雜的業(yè)務(wù)邏輯,就需要太多類(lèi)和太多代碼去表達(dá)(針對(duì)我們假定的這個(gè)簡(jiǎn)單的工時(shí)管 理系統(tǒng)的業(yè)務(wù)邏輯實(shí)現(xiàn),ruby使用了50行代碼,但Java至少要上千行代碼)。2、對(duì)象協(xié)作依賴(lài)于外部容器的組裝,因此裸寫(xiě)代碼是不可能的了,必須借助于外部的IoC容器。對(duì)于Ruby來(lái)說(shuō),更加適合充血模型。因?yàn)閞uby語(yǔ)言的表達(dá)能力非常強(qiáng)大,現(xiàn)在用ruby做企業(yè)應(yīng)用的DSL是一個(gè)很熱門(mén)的領(lǐng)域,DSL說(shuō)白了就是用來(lái)描述某個(gè)行業(yè)業(yè)務(wù)邏輯的專(zhuān)用語(yǔ)言。充血模型的好處是:1、對(duì)象自洽程度很高,表達(dá)能力很強(qiáng),因此非常適合于復(fù)雜的企業(yè)業(yè)務(wù)邏輯的實(shí)現(xiàn),以及可復(fù)用程度比較高。2、不必依賴(lài)外部容器的組裝,所以RoR沒(méi)有IoC的概念。充血模型的壞處是:1、對(duì)象高度自洽的結(jié)果是不利于大規(guī)模團(tuán)隊(duì)分工協(xié)作。一個(gè)編程個(gè)體至少要完成一個(gè)完整業(yè)務(wù)邏輯的功能。對(duì)于單個(gè)完整業(yè)務(wù)邏輯,無(wú)法再細(xì)分下去了。2、隨著業(yè)務(wù)邏輯的變動(dòng),領(lǐng)域模型可能會(huì)處于比較頻繁的變動(dòng)狀態(tài)中,領(lǐng)域模型不夠穩(wěn)定也會(huì)帶來(lái)web層代碼頻繁變動(dòng)。為什么Java只適合貧血模型?有沒(méi)有什么場(chǎng)景下可以允許所有業(yè)務(wù)邏輯和持久化全部揉在Model中。
查看完整描述

2 回答

  • 2 回答
  • 0 關(guān)注
  • 499 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)