小菜編程成長記(十 三層架構,分層開發)
[2] 小菜編程成長記(十 三層架構,分層開發)
系列文章導航:
小菜編程成長記(九 會修電腦不會修收音機?——聊設計模式原則)
小菜編程成長記(十一 無熟人難辦事?——聊設計模式迪米特法則)
小菜編程成長記(十三 設計模式不能戲說!設計模式怎就不能戲說?)
續上篇)
“大鳥,我們繼續討論吧!”小菜很沮喪的說。
“小伙子,不會修收音機也是很正常的,沒什么大不了的,用不著喪著一個臉。好象失戀一樣,男人再強也要學會說‘不’。”大鳥安慰著說,“如果你的目標是要成為修理電器專家,那么你連收音機都不會修,那是很郁悶的事。但你現在的目標是什么?”
“我想成為軟件架構師,編程專家。”小菜毫不含糊的說。
“就是,你的人生目標很明確,別的方面弱一些有什么關系呢。”大鳥繼續說道,“現在電視節目《波士堂》里請來的嘉賓,全是中國的大企業家,許多人身家上億,節目中都要求他們要有一個Boss秀,難道真的要把他們的才藝去和人家藝術家比嗎,我看老板們唱歌雖很業余,但卻也感覺得到他們那份認真和情趣——原來億萬富翁也是會唱歌,會跳舞,會食人間煙火的。至于他們歌唱得是不是跑調沒有人在意的,明白嗎?”
“我明白!,我一定要好好努力,成為編程專家。”,小菜說,“我們言歸正傳,你說我那程序用了反射后,還有什么需要修改的呢?”
“嗯,好!”大鳥清了清嗓子,開始上課,“如果你的程序再也不修改了,或者就是改改打折的額度和返利額度,那么你的代碼是足夠可以了。不過需求卻是會不斷產生的。比如說,現在這個程序是單機版的程序,如果需要商場多層樓的所有收銀機都要使用,那該怎么辦?”
“那用XML的配置文件就不合適了,應該用數據庫會比較好!”
“那么老板聽說了C/S架構的壞處,更新麻煩,不夠安全等等,他也不是傻瓜,每次更新都需要針對每臺機器部署,一次就半天,那些工作時間他是需要給程序員付薪水的。所以他提出要改為B/S架構,客戶端用瀏覽器支持,你怎么辦?”
“那需要改界面了,把應用程序改成Web程序。”
“就你現在的代碼,改起來容易嗎?”
“好象不容易,需要重新寫,盡管可以復制一些代碼過去,不過要重新寫的東西還是很多的。”
“好,那你有沒有發現,我說了這么多的需求變動,但系統中有一些東西一直沒有變,是哪些?”
“我知道,是策略模式用到的那幾個類,也就是正常收費、打折消費、返利消費等算法是沒有變化的。”
“是呀,其實不是算法不會變,而是之前我們已經考慮它很多了,用了策略模式,用了反射技術使得它的變化相對穩定。你剛才也說,要把應用程序改為Web是需要復制粘貼的,可實際上,改改界面和這些算法有什么關系?”
“沒有關系。”
“還有,把配置文件改為數據庫訪問,這其實是讀取寫入數據的操作,和算法又有什么關系呢?”
“也沒有關系,我知道了,你是說,他們之間完全可以分離開,互不影響,改動其一,不要影響其它兩者?哦,這是不是就是所謂的三層架構?”
“對,說得好,就是三層架構。三層架構或者分層開發說起來容易,在程序開發時的初學者還是有很多的誤解。比如有些初學者以為,DBServer-WebServer-Client是三層架構,其實這是物理意思上的三層架構,和程序的三層架構沒有什么關系。還有人以為,WinForm界面的窗體或者WebForm的aspx是最上一層,它們對應的代碼后置(codebehind)文件Form.cs或aspx.cs是第二層,然后再有一個訪問數據庫的代碼,比如ado.cs或SqlHelper.cs是最下一層,這其實也是非常錯誤的理解。再有,很多人認為MVC模式(Model-View-Controler)就是三層架構,這是比較經典的錯誤理解了。總之,盡管三層架構不算難,不過由于現在很多數書籍材料的講解不透,所以讓我們初學者都概念模糊,理解有誤,非常的可惜的。”
“啊,我一直以為MVC就是三層架構呀,看來真的弄錯了。那么三層具體是什么呢?”
“我不是已經告訴你了嗎?你說說看,不管是應用程序WinForm,還是網頁程序Aspx,它們主要用來干嗎的?”
“用來界面顯示和處理的,對的,它們可以看作是一層。叫界面層?”
“界面層這種叫法可以,或者叫UI層、表現層都可以。”
“訪問配置文件或處理數據庫是不是就是數據層了?”
“哈,三層架構是不是不難理解呀!說得很對,不過名稱應該叫做數據訪問層(Data Access Layer)或簡稱DAL層。”
“那么第三個層就是那些算法類了,這叫什么層呢?”
“這些算法是誰制定的?由誰來決定其變化?”
“當然是需求提出者,即軟件系統所有者制定的,他們要改算法,我們開發就得改。這都是他們的業務算法呀!”
“哈,好,你說到了一個詞,業務(Business)或叫商務,這其實是軟件的核心,我們就是根據業務規則來開發軟件提供服務的,所以這個層叫做業務邏輯層(Business Logic Layer)。不過它應該是中間的一層,介于另兩者之間。”
“哦,所謂的三層開發,就是關于表現層、業務邏輯層和數據訪問層的開發。那么他們之間的關系呢?”
“你需要知道,這其實只是大方向的分層,每個層中都有可能再細分為多個層次和結構。比如PetShop4,這是微軟用它來展示.Net企業系統開發的能力的范例,PetShop盡管作為對大型軟件系統開發的樣例還是不夠,但可以理解為兒童的智力玩具。不過對于初學編程的小菜你來說,玩具卻是最好的學習道具。”