freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

貧血模型or領(lǐng)域模型(文件)

 

【正文】 太多優(yōu)勢(shì),但是仍然可以看到代碼的實(shí)現(xiàn)要簡(jiǎn)單一些。其優(yōu)點(diǎn)是:1. 領(lǐng)域模型采用OO設(shè)計(jì),通過(guò)將職責(zé)分配到相應(yīng)的模型對(duì)象或Service,可以很好的組織業(yè)務(wù)邏輯,當(dāng)業(yè)務(wù)變得復(fù)雜時(shí),領(lǐng)域模型顯出巨大的優(yōu)勢(shì)。錯(cuò)誤的領(lǐng)域模型對(duì)項(xiàng)目的危害非常之大,而實(shí)現(xiàn)一個(gè)好的領(lǐng)域模型非常困難。軟件一般分為四層,分別為表示層,應(yīng)用層,領(lǐng)域?qū)雍突A(chǔ)設(shè)施層。應(yīng)用層 負(fù)責(zé)處理特定的應(yīng)用程序細(xì)節(jié)。運(yùn)輸層 兩臺(tái)主機(jī)上的應(yīng)用程序提供端到端的通信。主要包括IP協(xié)議。領(lǐng)域Service屬于領(lǐng)域?qū)樱枰袚?dān)部分業(yè)務(wù)概念,并且這個(gè)業(yè)務(wù)概念不易放入模型對(duì)象中??梢院蚑CP/IP的層模型進(jìn)行類比,開(kāi)發(fā)一個(gè)FTP程序和MSN聊天程序,它們的應(yīng)用層不同,但是可以同樣利用TCP/IP協(xié)議,TCP/IP協(xié)議不用變。用TCP/IP來(lái)類比,網(wǎng)際層支持標(biāo)準(zhǔn)以太網(wǎng)、令牌環(huán)等網(wǎng)絡(luò)接口,支持接口是在網(wǎng)際層中定義的,沒(méi)有在網(wǎng)際層定義的網(wǎng)絡(luò)接口是不能被網(wǎng)際層訪問(wèn)的。JDepend這個(gè)工具可以檢測(cè)包的依賴關(guān)系。Facade應(yīng)該是主要充當(dāng)遠(yuǎn)程訪問(wèn)的門(mén)面,這在EJB時(shí)代相當(dāng)普遍,自從Rod Johson叫嚷without EJB之后,大家對(duì)EJB的熱情降了很多,對(duì)許多使用貧血模型的應(yīng)用程序來(lái)說(shuō),facade是沒(méi)有必要的。DAO到底有沒(méi)有必要? 允許去掉DAO的一個(gè)必要條件就是Java的的持久化框架必須足夠先進(jìn),持久化邏輯的引入不會(huì)干擾業(yè)務(wù)邏輯,我認(rèn)為這在很長(zhǎng)一段時(shí)間內(nèi)將無(wú)法做到。在這篇文章里,我使用了一個(gè)轉(zhuǎn)帳例子來(lái)描述領(lǐng)域模型和貧血模型的不同,實(shí)現(xiàn)代碼可以從附件中下載,我推薦你看下附件代碼,這會(huì)對(duì)領(lǐng)域模型和貧血模型有個(gè)更清楚的認(rèn)識(shí)。以上只是我個(gè)人觀點(diǎn),如有不同意見(jiàn)歡迎指出。DAO的另外一個(gè)好處隔離數(shù)據(jù)庫(kù),這可以支持多個(gè)數(shù)據(jù)庫(kù),甚至可以支持文件存儲(chǔ)。DAO或Repository是負(fù)責(zé)持久化邏輯的,如果取消掉DAO或Repository,將持久化邏輯直接寫(xiě)入到model對(duì)象中,勢(shì)必造成model對(duì)象承擔(dān)不必要的職責(zé)。當(dāng)然如果確實(shí)需要提供遠(yuǎn)程訪問(wèn),那么遠(yuǎn)程Facade(或許叫做Remote Service更好)也是很有用的,但是它仍然屬于應(yīng)用層,只不過(guò)在技術(shù)層面上將它的實(shí)現(xiàn)委托給對(duì)應(yīng)的Service。貧血模型中Facade有何用? 對(duì)于領(lǐng)域模型,將Repository接口放入infrastructure包中會(huì)引入包的循環(huán)依賴,Repository依賴Domain,Domain依賴Repository??赡苡腥藭?huì)將Repository接口,相當(dāng)于貧血模型中的DAO接口,歸于基礎(chǔ)設(shè)施層,畢竟在貧血模型中DAO是和它的實(shí)現(xiàn)放在一起。下圖給出領(lǐng)域模型中的分層:應(yīng)用層為表示層提供接口,當(dāng)UI接口改變一般也會(huì)導(dǎo)致應(yīng)用層接口改變,也可能當(dāng)UI接口很相似時(shí)應(yīng)用層接口不用改變,但是領(lǐng)域?qū)?包括領(lǐng)域服務(wù))不能變動(dòng)。可以看出領(lǐng)域模型的包結(jié)構(gòu)與軟件分層是一致的。它們一起處理與電纜(或其他任何傳輸媒介)的物理接口細(xì)節(jié)。 領(lǐng)域?qū)?負(fù)責(zé)業(yè)務(wù)邏輯,是業(yè)務(wù)軟件的核心。 應(yīng)用層 定義軟件可以完成的工作,指揮領(lǐng)域?qū)拥膶?duì)象來(lái)解決問(wèn)題。我發(fā)現(xiàn)它們之間存在對(duì)應(yīng)關(guān)系,見(jiàn)下表: 其缺點(diǎn)是:1. 對(duì)程序員的要求較高,初學(xué)者對(duì)這種將職責(zé)分配到多個(gè)協(xié)作對(duì)象中的方式感到極不適應(yīng)。 // 對(duì)Hibernate來(lái)說(shuō)這不是必須的 return (fromAccountId, toAccountId, amount)。 (amount)。 } public TransferTransaction transfer(String fromAccountId, String toAccountId, BigDecimal amount) throws AccountNotExistedException, AccountUnderflowException { Account fromAccount = (fromAccountId)。public class TransferServiceImpl implements TransferService { private AccountRepository accountRepository。 25. return23. //(fromAccount)。21. (amount)。18. null)toAccountAccountNotExistedException(fromAccountId)。== Account13. AccountNotExistedException,transfer(String 10. 7. TransferTransactionRepository6. TransferServiceImpl(AccountRepositoryprivate3. AccountRepositoryTransferServiceTransferServiceImpl類:Java代碼 1. public } public void credit(BigDecimal amount) { (() 0)。 } public BigDecimal getBalance() { return balance。 (balance == null || () = 0)。public class Account { private String accountId。 39. 0)。{ public34. } 32. =newamount)) 27. AccountUnderflowExceptionvoidbalance。getBalance()20. { balance 0)。null balance)public9. {} 6. overdraftPolicy 4. BigDecimalaccountId。{ 代碼實(shí)現(xiàn) 比如轉(zhuǎn)帳操作,它是一個(gè)行為,并且它涉及三個(gè)對(duì)象,fromAccount,toAccount和TransferTransaction,將它放入任一個(gè)對(duì)象中都不好。domain包中包括兩個(gè)子包
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1