大话设计模式(十一 三层架构,分层开发)
(續(xù)上篇)
???????? “大鳥,我們繼續(xù)討論吧!”小菜很沮喪的說。
???????? “小伙子,不會修收音機(jī)也是很正常的,沒什么大不了的,用不著喪著一個(gè)臉。好象失戀一樣,男人再強(qiáng)也要學(xué)會說‘不’。”大鳥安慰著說,“如果你的目標(biāo)是要成為修理電器專家,那么你連收音機(jī)都不會修,那是很郁悶的事。但你現(xiàn)在的目標(biāo)是什么?”
?????? “我想成為軟件架構(gòu)師,編程專家。”小菜毫不含糊的說。
????? “就是,你的人生目標(biāo)很明確,別的方面弱一些有什么關(guān)系呢。”大鳥繼續(xù)說道,“現(xiàn)在電視節(jié)目《波士堂》里請來的嘉賓,全是中國的大企業(yè)家,許多人身家上億,節(jié)目中都要求他們要有一個(gè)Boss秀,難道真的要把他們的才藝去和人家藝術(shù)家比嗎,我看老板們唱歌雖很業(yè)余,但卻也感覺得到他們那份認(rèn)真和情趣——原來億萬富翁也是會唱歌,會跳舞,會食人間煙火的。至于他們歌唱得是不是跑調(diào)沒有人在意的,明白嗎?”
????? “我明白!,我一定要好好努力,成為編程專家。”,小菜說,“我們言歸正傳,你說我那程序用了反射后,還有什么需要修改的呢?”
????? “嗯,好!”大鳥清了清嗓子,開始上課,“如果你的程序再也不修改了,或者就是改改打折的額度和返利額度,那么你的代碼是足夠可以了。不過需求卻是會不斷產(chǎn)生的。比如說,現(xiàn)在這個(gè)程序是單機(jī)版的程序,如果需要商場多層樓的所有收銀機(jī)都要使用,那該怎么辦?”
????? “那用XML的配置文件就不合適了,應(yīng)該用數(shù)據(jù)庫會比較好!”
????? “那么老板聽說了C/S架構(gòu)的壞處,更新麻煩,不夠安全等等,他也不是傻瓜,每次更新都需要針對每臺機(jī)器部署,一次就半天,那些工作時(shí)間他是需要給程序員付薪水的。所以他提出要改為B/S架構(gòu),客戶端用瀏覽器支持,你怎么辦?”
????? “那需要改界面了,把應(yīng)用程序改成Web程序。”
????? “就你現(xiàn)在的代碼,改起來容易嗎?”
????? “好象不容易,需要重新寫,盡管可以復(fù)制一些代碼過去,不過要重新寫的東西還是很多的。”
????? “好,那你有沒有發(fā)現(xiàn),我說了這么多的需求變動,但系統(tǒng)中有一些東西一直沒有變,是哪些?”
????? “我知道,是策略模式用到的那幾個(gè)類,也就是正常收費(fèi)、打折消費(fèi)、返利消費(fèi)等算法是沒有變化的。”
????? “是呀,其實(shí)不是算法不會變,而是之前我們已經(jīng)考慮它很多了,用了策略模式,用了反射技術(shù)使得它的變化相對穩(wěn)定。你剛才也說,要把應(yīng)用程序改為Web是需要復(fù)制粘貼的,可實(shí)際上,改改界面和這些算法有什么關(guān)系?”
????? “沒有關(guān)系。”??????
????? “還有,把配置文件改為數(shù)據(jù)庫訪問,這其實(shí)是讀取寫入數(shù)據(jù)的操作,和算法又有什么關(guān)系呢?”
????? “也沒有關(guān)系,我知道了,你是說,他們之間完全可以分離開,互不影響,改動其一,不要影響其它兩者?哦,這是不是就是所謂的三層架構(gòu)?”
????? “對,說得好,就是三層架構(gòu)。三層架構(gòu)或者分層開發(fā)說起來容易,在程序開發(fā)時(shí)的初學(xué)者還是有很多的誤解。比如有些初學(xué)者以為,DBServer-WebServer-Client是三層架構(gòu),其實(shí)這是物理意思上的三層架構(gòu),和程序的三層架構(gòu)沒有什么關(guān)系。還有人以為,WinForm界面的窗體或者WebForm的aspx是最上一層,它們對應(yīng)的代碼后置(codebehind)文件Form.cs或aspx.cs是第二層,然后再有一個(gè)訪問數(shù)據(jù)庫的代碼,比如ado.cs或SqlHelper.cs是最下一層,這其實(shí)也是非常錯(cuò)誤的理解。再有,很多人認(rèn)為MVC模式(Model-View-Controler)就是三層架構(gòu),這是比較經(jīng)典的錯(cuò)誤理解了。總之,盡管三層架構(gòu)不算難,不過由于現(xiàn)在很多數(shù)書籍材料的講解不透,所以讓我們初學(xué)者都概念模糊,理解有誤,非常的可惜的。”
????? “啊,我一直以為MVC就是三層架構(gòu)呀,看來真的弄錯(cuò)了。那么三層具體是什么呢?”
????? “我不是已經(jīng)告訴你了嗎?你說說看,不管是應(yīng)用程序WinForm,還是網(wǎng)頁程序Aspx,它們主要用來干嗎的?”
????? “用來界面顯示和處理的,對的,它們可以看作是一層。叫界面層?”
????? “界面層這種叫法可以,或者叫UI層、表現(xiàn)層都可以。”
????? “訪問配置文件或處理數(shù)據(jù)庫是不是就是數(shù)據(jù)層了?”
????? “哈,三層架構(gòu)是不是不難理解呀!說得很對,不過名稱應(yīng)該叫做數(shù)據(jù)訪問層(Data Access Layer)或簡稱DAL層。”
?????“那么第三個(gè)層就是那些算法類了,這叫什么層呢?”
???? “這些算法是誰制定的?由誰來決定其變化?”
???? “當(dāng)然是需求提出者,即軟件系統(tǒng)所有者制定的,他們要改算法,我們開發(fā)就得改。這都是他們的業(yè)務(wù)算法呀!”
???? “哈,好,你說到了一個(gè)詞,業(yè)務(wù)(Business)或叫商務(wù),這其實(shí)是軟件的核心,我們就是根據(jù)業(yè)務(wù)規(guī)則來開發(fā)軟件提供服務(wù)的,所以這個(gè)層叫做業(yè)務(wù)邏輯層(Business Logic Layer)。不過它應(yīng)該是中間的一層,介于另兩者之間。”
???? “哦,所謂的三層開發(fā),就是關(guān)于表現(xiàn)層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層的開發(fā)。那么他們之間的關(guān)系呢?”
???? “你需要知道,這其實(shí)只是大方向的分層,每個(gè)層中都有可能再細(xì)分為多個(gè)層次和結(jié)構(gòu)。比如PetShop4,這是微軟用它來展示.Net企業(yè)系統(tǒng)開發(fā)的能力的范例,PetShop盡管作為對大型軟件系統(tǒng)開發(fā)的樣例還是不夠,但可以理解為兒童的智力玩具。不過對于初學(xué)編程的小菜你來說,玩具卻是最好的學(xué)習(xí)道具。”
下面圖源自Bruce Zhang博客
? “如果是要細(xì)化,可能結(jié)構(gòu)就會變得很復(fù)雜。比如給你看看PetShop4的結(jié)構(gòu)圖。”大鳥繼續(xù)說道。
“啊,上面那圖我是明白了,下面這圖看得暈暈乎乎的,哪有這樣復(fù)雜的玩具,大鳥又在故弄玄虛,快點(diǎn)解釋一下?”小菜疑惑的說。
?????? “第一次看到就完全看明白,那不就成天才了。學(xué)習(xí)它還需要慢慢來,以后再說。你現(xiàn)在應(yīng)該對改寫商場收銀系統(tǒng)有點(diǎn)數(shù)了吧,應(yīng)該怎么做呢?”
?????? “應(yīng)該原來的解決方案分為三個(gè)項(xiàng)目,一個(gè)UI項(xiàng)目,目前是WinForm的程序,一個(gè)BLL項(xiàng)目,用來把算法類都封裝,還有一個(gè)DAL項(xiàng)目,用來訪問配置文件。對嗎?”
????? “嗯,差不多了,快去改吧,口說容易,實(shí)踐中會有很多細(xì)節(jié)問題等著你去解決的。”
????? “好的,不過今天不行了,我前幾天面試的一家公司給我Offer了,我明天就要去第一天上班,明晚我再去改寫這個(gè)程序。”小菜說道。
????? “恭喜恭喜,就是你之前提到了那家做物流軟件的公司嗎?找到工作你得請客啦。”
????? “No problem,不過等我發(fā)工資吧。就是那一家。感覺公司還是很大的。”
????? “那你快去休息吧,第一天要好好表現(xiàn)哦!”
(待續(xù))
應(yīng)一些回復(fù)朋友的要求,專門寫了關(guān)于Web架構(gòu)方面的文章,本篇還只是簡單介紹。其實(shí)這些都不是新鮮的東西,如果你認(rèn)為自己的確是小菜,我建議你去下載上一篇的代碼來根據(jù)本篇的介紹去改寫,編程是實(shí)踐性很強(qiáng)的技術(shù),理解不等于會應(yīng)用的。 出處:http://www.cnblogs.com/cj723/archive/2007/03/26/688048.html
總結(jié)
以上是生活随笔為你收集整理的大话设计模式(十一 三层架构,分层开发)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大话设计模式(十 会修电脑不会修收音机?
- 下一篇: 大话设计模式(十四 设计模式不能戏说!设