小菜編程成長記(十一 三層架構,分層開發)

來源:互聯網
上載者:User

(續上篇)
         “大鳥,我們繼續討論吧!”小菜很沮喪的說。
         “小夥子,不會修收音機也是很正常的,沒什麼大不了的,用不著喪著一個臉。好象失戀一樣,男人再強也要學會說‘不’。”大鳥安慰著說,“如果你的目標是要成為修理電器專家,那麼你連收音機都不會修,那是很鬱悶的事。但你現在的目標是什嗎?”
       “我想成為軟體架構師,編程專家。”小菜毫不含糊的說。
      “就是,你的人生目標很明確,別的方面弱一些有什麼關係呢。”大鳥繼續說道,“現在電視節目《波士堂》裡請來的嘉賓,全是中國的大企業家,許多人身家上億,節目中都要求他們要有一個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儘管作為對大型軟體系統開發的範例還是不夠,但可以理解為兒童的智力玩具。不過對於初學編程的小菜你來說,玩具卻是最好的學習道具。”

下面圖源自Bruce Zhang部落格

       “如果是要細化,可能結構就會變得很複雜。比如給你看看PetShop4的結構圖。”大鳥繼續說道。       “啊,上面那圖我是明白了,下面這圖看得暈暈乎乎的,哪有這樣複雜的玩具,大鳥又在故弄玄虛,快點解釋一下?”小菜疑惑的說。
       “第一次看到就完全看明白,那不就成天才了。學習它還需要慢慢來,以後再說。你現在應該對改寫商場收銀系統有點數了吧,應該怎麼做呢?”
       “應該原來的解決方案分為三個項目,一個UI項目,目前是WinForm的程式,一個BLL項目,用來把演算法類都封裝,還有一個DAL項目,用來訪問設定檔。對嗎?”
      “嗯,差不多了,快去改吧,口說容易,實踐中會有很多細節問題等著你去解決的。”
      “好的,不過今天不行了,我前幾天面試的一家公司給我Offer了,我明天就要去第一天上班,明晚我再去改寫這個程式。”小菜說道。
      “恭喜恭喜,就是你之前提到了那家做物流軟體的公司嗎?找到工作你得請客啦。”
      “No problem,不過等我發工資吧。就是那一家。感覺公司還是很大的。”
      “那你快去休息吧,第一天要好好表現哦!”(待續)
應一些回複朋友的要求,專門寫了關於Web架構方面的文章,本篇還只是簡單介紹。其實這些都不是新鮮的東西,如果你認為自己的確是小菜,我建議你去下載上一篇的代碼來根據本篇的介紹去改寫,編程是實踐性很強的技術,理解不等於會應用的。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.