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