面向?qū)ο箝_發(fā)討論_第1頁
面向?qū)ο箝_發(fā)討論_第2頁
面向?qū)ο箝_發(fā)討論_第3頁
面向?qū)ο箝_發(fā)討論_第4頁
面向?qū)ο箝_發(fā)討論_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、面向?qū)ο蟮拈_發(fā)討論1大綱開發(fā)原理介紹開發(fā)原理應(yīng)用遺留問題2開發(fā)原理介紹結(jié)構(gòu)分層的經(jīng)驗(yàn)面向?qū)ο蟮南到y(tǒng)設(shè)計(jì)3結(jié)構(gòu)分層的經(jīng)驗(yàn)三層架構(gòu)4過度分層的缺點(diǎn)當(dāng)開發(fā)人員在以前的兩層結(jié)構(gòu)中痛苦煎熬了很長一段時(shí)間,突然看到了三層結(jié)構(gòu)的解決方案的時(shí)候,一般會(huì)有終于找到了救世主的感覺。但是這種感覺往往會(huì)導(dǎo)致掉到另外一個(gè)同樣恐怖的陷阱“過度設(shè)計(jì)”中。犯錯(cuò)誤的原因有很多,不過主要是因?yàn)闆]有一個(gè)比較明確的如何分層的指導(dǎo)性原則。假如說我們分層的原則是為了抽象邏輯,分三層的原因是要讓業(yè)務(wù)邏輯和界面及數(shù)據(jù)庫解除耦合,那么如果按照這個(gè)分層原則,我把邏輯重新歸類更加細(xì)的分為四層、五層、六層行不行呢?如果不行,那是什么原因不行呢?在沒

2、有正確的原則指導(dǎo)下,分層技巧很容易被濫用,導(dǎo)致分出許多沒有必要的層出來。無端的增加了開發(fā)和維護(hù)成本,以及更重要的是增加了重構(gòu)的代價(jià),降低了團(tuán)隊(duì)的敏捷能力。 5面向?qū)ο蠹軜?gòu)設(shè)計(jì)大師Martin Fowler在介紹如何設(shè)計(jì)分布式系統(tǒng)的時(shí)候曾說過:分布式系統(tǒng)的設(shè)計(jì)原則的第一條是,不要使用分布式。他的意思當(dāng)然不是說要絕對(duì)禁止使用分布式設(shè)計(jì),而是勸導(dǎo)人們盡量把問題簡單化。能不分布式設(shè)計(jì)的,就不要分布式設(shè)計(jì)。6套用他的這句話提出對(duì)分層的感受就是:多層結(jié)構(gòu)系統(tǒng)的設(shè)計(jì)原則第一條是,不要使用多層結(jié)構(gòu)。當(dāng)然也并不是說層數(shù)越少就越好,而是希望能清醒的認(rèn)識(shí)到增加層數(shù)會(huì)增加結(jié)構(gòu)的復(fù)雜性,不要輕易的作出分層的決定,一定要

3、到感覺必須要增加一層才能解決問題的時(shí)候,再來決定增加一層。7最終定型的應(yīng)用系統(tǒng)結(jié)構(gòu)層次 8分層的經(jīng)驗(yàn)總結(jié)建立一個(gè)完全面向?qū)ο蠼5念I(lǐng)域模型層,讓這個(gè)層盡量處理多的業(yè)務(wù)邏輯。其它層盡可能的薄一點(diǎn),把業(yè)務(wù)邏輯都轉(zhuǎn)移到領(lǐng)域模型層中。UI盡可能和領(lǐng)域模型貼近一點(diǎn),中間不要經(jīng)過太多中轉(zhuǎn),物理邊界也盡可能的少。業(yè)務(wù)對(duì)象只能有一套,也就是領(lǐng)域模型。只要出了領(lǐng)域模型層,外面全部是零散數(shù)據(jù),沒有對(duì)象的概念。只有在領(lǐng)域模型層才可以處理對(duì)象。如果一定要分布式。全部用簡單數(shù)據(jù)類型通過接口訪問領(lǐng)域模型。9面向?qū)ο蟮南到y(tǒng)設(shè)計(jì)在你打算進(jìn)行面向?qū)ο蟮南到y(tǒng)之前,你一定要考慮是否已經(jīng)解決或能解決以下的問題:一、對(duì)象的持久化二、界

4、面顯示三、遠(yuǎn)程調(diào)用 四、開發(fā)人員的面向?qū)ο笏季S 10一、對(duì)象的持久化對(duì)象的持久化是最容易被想到的問題,同時(shí)也是最難解決的問題。由于關(guān)系型數(shù)據(jù)庫模型和面向?qū)ο竽P痛嬖谝恍┍容^大的差異,如何將你的對(duì)象保存和快速的查詢出來很是頭痛。雖然采用面向?qū)ο髷?shù)據(jù)庫雖然可以最方便的解決這個(gè)問題,但是你會(huì)面臨更多其它的問題,比如備份,報(bào)表和實(shí)施維護(hù)人員的培訓(xùn)等等。雖然有像NHibernate這樣的ORM框架來幫助你做這個(gè)工作,不過你需要去多學(xué)習(xí)一門資料不全的新技術(shù)。另外,這些開源產(chǎn)品中有不少的BUG,你必須有做好調(diào)試別人代碼的準(zhǔn)備,如果你無法完全掌握這些代碼的話,你會(huì)死得很慘。 11二、界面顯示由于界面無法直接的

5、將復(fù)雜的對(duì)象顯示出來,你在界面層又必須再做一次對(duì)象的平面化操作,將對(duì)象變成各種列表和文本框控件可以直接綁定的一維或二維數(shù)據(jù)結(jié)構(gòu)。這方面目前還沒有什么好的自動(dòng)化方案,你必須手工做。所以我們的策略就是盡量減少這個(gè)轉(zhuǎn)換步驟,就是在服務(wù)端就把面向?qū)ο筠D(zhuǎn)換成平面數(shù)據(jù),然后在客戶端直接綁定到控件上。在數(shù)據(jù)傳輸對(duì)象的選擇上,可以用自定義對(duì)象,也可以用DataTable做傳輸對(duì)象,兩者區(qū)別不是很大,各有各的好處。 12如果你的對(duì)象是手工持久化的話,你做到這一步會(huì)感到很沮喪。因?yàn)槠矫娴臄?shù)據(jù)被你費(fèi)了老大勁從數(shù)據(jù)庫中轉(zhuǎn)為對(duì)象,還沒有怎么體會(huì)到面向?qū)ο蟮暮锰?,又要再將?duì)象還原成平面數(shù)據(jù)交給界面去顯示,你可能會(huì)覺得非常

6、的不值得。不如直接就把平面數(shù)據(jù)讀出來交給界面去顯示,既簡單又方便。如果你已經(jīng)產(chǎn)生了這個(gè)念頭的話,恭喜你,你已經(jīng)離全面放棄面向?qū)ο笙到y(tǒng)設(shè)計(jì),完全退回到面向過程不遠(yuǎn)了。 13三、遠(yuǎn)程調(diào)用 如果前面你還能堅(jiān)持下來,到了這一步,很少人再能堅(jiān)持了。面向?qū)ο髮?duì)遠(yuǎn)程訪問的問題考慮不足,使用面向?qū)ο箝_發(fā)系統(tǒng)的一個(gè)最大的優(yōu)點(diǎn)是建模能力強(qiáng),業(yè)務(wù)模型很清晰。比如你要找某個(gè)用戶的公司名稱,你可以簡單的用User.Company.Name來得到該用戶所屬公司的名稱。假如你用了多層結(jié)構(gòu),那么問題來了,你的對(duì)象是建在n層上的,而你需要在n+1層里對(duì)對(duì)象進(jìn)行操作。而且n層和n+1層是遠(yuǎn)程調(diào)用。那么,如果你傳個(gè)User過去,很

7、明顯用User.Company.Name是獲取不到公司信息的。所以,如果你打算在n+1層做業(yè)務(wù)邏輯的話,你必須把整個(gè)對(duì)象樹傳遞過去,這樣做明顯代價(jià)又太高。很多面向?qū)ο髮I(yè)人士就提出了什么VO,BO,DTO,PO等等五花八門的貧血對(duì)象來企圖解決這個(gè)問題,這樣做的結(jié)果不僅是把問題給搞復(fù)雜化,更糟糕的是,這樣一來,你當(dāng)初所憧憬的面向?qū)ο笙到y(tǒng)其實(shí)已經(jīng)是一個(gè)變相的Action Script系統(tǒng)了。 14所以最好的方式是你就在領(lǐng)域模型層把業(yè)務(wù)處理完,中間層不要采用什么分布式系統(tǒng)設(shè)計(jì)。Martin Fowler說過:“分布式系統(tǒng)設(shè)計(jì)的第一原則是,不要使用分布式系統(tǒng)”。我們盡量要利用統(tǒng)一編程模型,將邏輯盡量都

8、放到領(lǐng)域?qū)永铩亩梢宰尭嗟牟僮髦苯永玫筋I(lǐng)域模型的完全面向?qū)ο蟮臉I(yè)務(wù)邏輯處理的好處 15四、開發(fā)人員的面向?qū)ο笏季S 這一點(diǎn)最重要,如果開發(fā)人員無法認(rèn)識(shí)到面向?qū)ο蟮暮锰?,并且在思維模式上有很頑固的面向過程套路的話。在面對(duì)上述問題的時(shí)候會(huì)抱怨連連,不會(huì)盡全力的配合。如果整個(gè)的意見無法達(dá)成一致,那什么東西都做不出來,因?yàn)閳F(tuán)結(jié)才是最重要的。所以你要么盡力說服你的團(tuán)員,讓他們真正的明白并理解為什么要這么做,要么你就趁早放棄。 16面向?qū)ο笙到y(tǒng)設(shè)計(jì)總結(jié)要么就完全用面向?qū)ο蟮母拍钊ピO(shè)計(jì),要么就完全用面向過程。如果當(dāng)初是決定要走面向?qū)ο蟮牡缆?,后來又在關(guān)鍵性問題上向面向過程做妥協(xié)。那么就干脆完全用面向過程

9、的思維去解決問題比較好。否則面對(duì)一個(gè)四不象的怪物,你會(huì)發(fā)現(xiàn)維護(hù)起來更加麻煩。17翻越面向?qū)ο筮@座大山非常艱辛,但是你如果真正能翻越過去,你會(huì)發(fā)現(xiàn)面向?qū)ο蟮氖澜缯娴氖且粋€(gè)很美妙的境界。18開發(fā)原理應(yīng)用例子介紹功能數(shù)據(jù)結(jié)構(gòu)和實(shí)體結(jié)構(gòu)模塊分解總結(jié)19例子介紹HeadSubDetailDetail20模塊分解Modul ClassFactory ClassSelect :GetUpdate :SetView/Control ClassViewControl21ViewBinding Text/Label Bingding GridView處理原則,單向處理。即業(yè)務(wù)邏輯只對(duì)modul處理及更新,通過modul的binding來實(shí)現(xiàn)對(duì)界面的刷新22Control數(shù)據(jù)效驗(yàn)界面控制窗體間數(shù)據(jù)傳遞23總結(jié)Form中處理的對(duì)象Textbox、Button、DateTimePicker、GridviewForm中處理的事件Form_validating、TxtBoxButtion_Clicked、Buttion_clickedForm中處理的方法LoadingDate、UpdateControls、BindingControl24Gridview處理的對(duì)象Columns、Cell、RowGridview處理的事件Gride_OnValidateValueGride_OnNewRowCreat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論