天天看點

二十七(序幕)、【開源】EFW架構破繭成蝶

回《【開源】EFW架構系列文章索引》       

EFW架構源代碼下載下傳V1.3:http://pan.baidu.com/s/1c0dADO0

EFW架構執行個體源代碼下載下傳:http://pan.baidu.com/s/1eQCc69G

      自己也經曆了一些Web項目,但對MVC的了解還是比較片面的,那就講解一下我認識MVC的經曆,這樣沒有理論教導,隻有一些學習的引導以及感悟吧;在現實項目中可能更注重開發效率與成果,是以對新的技術或理論都是比較保守的,也跟所在的行業是個比較保守的行業有關吧;其實自己對業務架構清晰,代碼結構整潔還是比較關心的,是以對一些好的技術理論也是有所關注;

1.asp時代

      最早接觸Web開發是用Asp做網站開發,就是在html标簽中嵌入asp腳本代碼,資料庫也一般用的Access,當然程式功能也沒那麼複雜無非就那麼幾個欄目,首頁、公司簡介、産品、聯系我們、留言闆等;雖然功能簡單但是一些代碼複用還是想了一些辦法,比如把連接配接資料庫的代碼單獨一個conn.asp檔案,還有使用者驗證、頁眉、頁腳等,那時候一般都是用檔案引用的方式來複用代碼;多年沒接觸asp,偶然去看了些流行的CMS代碼,根本看不懂了,那麼多代碼檔案沒有一個是html檔案,基本都是動态生成的吧,index.asp打開也是一堆的腳本;能寫出這些代碼或看懂代碼的人怎麼也是技術牛人吧,但如我這般的人還是占大多數吧,怎麼也是一個結構簡單明了,代碼清晰整潔的架構更适合我們吧。

2.donet桌面程式時代

      後來進入行業軟體公司用.net做桌面程式,那時候還是用vs2003開發,系統為兩層結構,用戶端直連資料庫,操作資料庫的代碼都是直接寫在界面代碼中的,就這樣上千個用戶端同時使用也是挺正常的;一些重複的功能一般都是封裝成業務控件,使用的時候很友善把控件拖進去就行了,還有一些常用的基礎資料就封裝成公共的類庫;

現在想來這種方法還是有很多優點的:

1.首先就是上手快,一個.Net新手馬上就能修改程式bug,

2.查找問題維護也比較友善,因為結構簡單根據界面上的操作按鈕一步步就可以找到問題代碼修正就行,也不會說對其他功能會有影響;

同時缺點也是很突出的:

1.随着業務功能越來越複雜,代碼變得越來越難控制,程式中有幾個複雜的界面,一個檔案代碼的行數就達到1萬以上,後來增加一個新功能變得越來越痛苦;

2.程式代碼的移植性很差,随着業務的擴充需要開發一些新的子產品,而新子產品的大部分功能在老子產品中都有的,現在要把這些功能代碼剝離出來是很痛苦的,千絲萬縷,真是斬不斷理還亂;

3.三層架構時代

      在這些優點與缺點的磨練中,平時也就尋找一些解決辦法,得整理出一種結合兩者的開發模式;三層架構、MVC、ORM、AOP、面向對象、設計模式等都想利用起來,當然中間的一些技術還是挺複雜,如MVC、設計模式的理論,NHibernate的配置都是苦學無果,不過最後自己還是整出個簡易的開發架構,當然三層架構和面向對象是少不了的,ORM自己弄了個單表操作,設計模式用了個工廠模式;剛好也有一個不大不小的項目需要重新開發,既然帶隊就得把新的開發模式給使用起來吧,幸好團隊成員也都是非常支援使用新的,經過幾個月的努力奮鬥系統終于也給弄出來了,開發過程中有喜也有憂,喜的是這種新的開發模式用起來還是比較順手的,寫出來的代碼也比以前好看,憂的是大家對面向對象的思想了解不一緻或存在偏差,導緻對象比較多,有些還不倫不類;不過想想不也是有個過程的,不還有重構這一條路嗎。後來系統上線時候,後面的人員接收維護也都覺得比以前代碼好,那是真的開心。

4.ExtJs+AspX

      真正發揮這個架構的作用還在後面,有新的客戶為了後期維護友善需要系統是B/S架構的,那麼需要将現有C/S的程式改成B/S的,經過大家評估還是可行的,既然系統是用三層架構開發的,邏輯層已經分離了,那麼隻要把Winform界面替換成Web界面就行了,工作量還是比較小的;這樣又開始了新一輪的征戰,界面架構最後定了ExtJs,因為另一個部門就是用的ExtJs+Java開發的系統,為了減少技術的風險最後就定了ExtJs,最後發現這玩意是一個錯誤的選擇,ExtJs太複雜了像我們這些新手根本一下掌握不了;最後搭建成B/S的架構是這樣的,ExtJs+AspX,ExtJS界面開發,aspx調用背景邏輯層進行資料轉換輸出;雖然大部分人都是第一次做web系統,但還是跌跌撞撞的做出來了,後面的維護确實還是挺頭痛,特别是Extjs做的界面那部分,一個js檔案也是老長,javascript本來調試起來就不友善,維護就更困難了;後來也看了人家java部門的代碼,對比起來,人家的确實還是清晰好看多了,經過一番分析可能是兩方面問題:

一是、我們這邊第一次接觸JS代碼編寫是以難免寫法不是很規範,對裡面的控件封裝使用都不熟練。

二是、我們的界面功能确實比那邊的要複雜,因為我們都是把Winform的界面照搬用Extjs實作的,一些用Winform很容易實作的功能用Web方式就非常麻煩,沒有做深層次的分析轉換,是以Js代碼變得很難維護是再所難免的;

5.JqueryEasyUI+HTTPHandler+Controller

      經過了上面的經驗教訓,既然ExtJS這麼難學就找個容易學的,就換成了JqueryEasyUI,Aspx做資料處理太浪費了,想把cs代碼移到獨立一個類庫中去,後來就發現了ashx,再後來使用HTTPHandler把http請求完全分離,并擴充出了WebController統一進行資料的處理;最後架構就變成了如今這樣,JqueryEasyUI+HTTPHandler+Controller。後來用這個架構進行了幾個Web系統的開發,效果都不錯,特别是學習成本與開發效率都是很突出的;

      為了适用各種情況,對架構又做了一些擴充,比如:進行手機網站開發,界面架構換成JqueryMobile,那背景Controller也擴充出支援JqueryMobile的資料處理控制器;後來又加入了更多的界面架構和控制器,ExtJS、QUI、JqueryUI等;

      随着架構的越來越完善,反過來想這種開發模式還是比較類似MVC模式的,想着以後給新人講解開發模式的時候也有個理論依據,是以拿出來探讨一下,對比其他的MVC架構,總結出優缺點與适合的場景。

繼續閱讀