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

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

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