n-tier理論中數(shù)據(jù)在層間是如何傳遞的

層間的數(shù)據(jù)傳遞
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號(hào): 73203。
馬克-to-win:一個(gè)數(shù)據(jù)庫中的表對(duì)應(yīng)一個(gè)PO(Persistant Object),這好理解。在Web層的網(wǎng)頁,當(dāng)用戶提交表單數(shù)據(jù)以后,在Controller層,把表單數(shù)據(jù)放在VO(View Object有人也叫Value Object)當(dāng)中,接著調(diào)用Service層。VO相對(duì)于網(wǎng)頁表單數(shù)據(jù),也許對(duì)應(yīng)n個(gè)PO,而且和PO數(shù)據(jù)格式也許不一樣。馬克-to-win:(表單2012/1/1而數(shù)據(jù)庫中是 2012-1-1)。Service層原始接受的數(shù)據(jù)是VO,但在這里,Service層把它變成DTO(Data Transfer Object)。DTO不用于VO,不但因?yàn)槎吖δ懿煌―TO用于專門的層間傳輸,VO用于持有表單數(shù)據(jù))而且DTO也許有很多VO里沒有的數(shù)據(jù),比如Service層的方法現(xiàn)場(chǎng)產(chǎn)生的加密密碼,各種加密的標(biāo)志,收到的短信驗(yàn)證碼等。馬克-to-win:Service層接著調(diào)用BO,BO調(diào)用DO,(這個(gè)過程應(yīng)該是涉及的業(yè)務(wù)范圍越來越小,越來越具體,就像中央委托給東北局,東北局再委托給遼寧省,處理某個(gè)事一樣),DTO在這個(gè)過程中承載的數(shù)據(jù)量也必然越來越小。馬克-to-win:既然有可能Service層和BO層或DO層不在同一臺(tái)電腦上,為了節(jié)約網(wǎng)絡(luò)帶寬并提高系統(tǒng)性能,我們可以推出若干BoDto和DoDto的概念,使它僅封裝BO和DO需要的數(shù)據(jù),當(dāng)然采用BoDto和DoDto系統(tǒng),會(huì)有越來越多的各種DTO,所以我們實(shí)際中寧愿使用粗粒DTO(即包含比需要多的屬性),而不是重新編寫一堆新的各種各樣的DTO,前提是只要冗余數(shù)據(jù)不是太多。馬克-to-win:在代碼量代碼復(fù)雜度和系統(tǒng)性能之間做取舍是我們工程師永恒的話題。技術(shù)教會(huì)大家,大家起碼可以有做選擇的機(jī)會(huì)。當(dāng)DTO進(jìn)入到DO層以后,經(jīng)過DO的復(fù)雜處理后,當(dāng)需要被傳給Dao層,壓入數(shù)據(jù)庫之前一瞬間,就需要被變成PO 了。Dao層就相對(duì)簡(jiǎn)單了。

馬克-to-win:注意VO,PO,DTO都是沒有業(yè)務(wù)方法的。只是數(shù)據(jù)而已。它們的存在使得層與層之間更好的解耦。(一層的改變不妨礙另一層)。分工越精細(xì)化,越不容易出錯(cuò)。作為項(xiàng)目負(fù)責(zé)人的未來的你,要時(shí)刻謹(jǐn)記,今天這堆做項(xiàng)目的人,未來很有可能變成一波新人。馬克-to-win:更有甚者,你們正在做一個(gè)外包項(xiàng)目。只有大家符合一套嚴(yán)格的規(guī)矩,在更換人員,變換需求時(shí),才能應(yīng)付自如。