標籤:c style class code java a
看了些關於MVC的資料,做一些MVC的筆記。
分解關注點
在MVC世界裡有個很重要的觀念--“分解關注點”(Separation of Concerns),指的是:當你進行軟體開發時,可一直關注當前的對象,而不會受到同樣的系統中其它對象的幹擾,進而專註於完畢開發工作。如此一來,不但easy提升軟體品質,也能夠加快對代碼的理解速度。
分解關注點觀念的特徵與優勢
對開發ASP.net MVC項目的建議
不要反覆你自己:
好的軟體不應該有太多反覆的程式碼,所以:Don‘t Repeat Yourself
沒有完美的架構,僅僅有合適的架構
適當的設計模式有助於提升架構的品質
分割你的腦袋,並且至少切成3份:
至少是Model、View、Controller,有的時候能夠使Service Level,Repository Level、Helper Level等。
建立有責任感的對象:
MVC中已經分割定義了 Model負責商業邏輯、View負責最上層顯示、Controller負責資料流程式控制制等不同的職責,三者分工合作、嚴守紀律、不得逾越
規範對象合作
相信總會有更好的解決方案
沒有人能夠將軟體一次寫對
ASP.net MVC中常見的問題
MVC的模式彷彿又回到了ASP的年代?
在ASP年代,沒有合適的模板引擎,全部的程式與視覺邏輯混在了一起,這樣的寫法為“意大利麵式”的寫法。在ASP.net Web Forms年代,有了 CB(Code Behind)的概念,有效分離了HTML代碼和程式碼。而且MS匯入了Windows Form的開發方式,ViewState與事件驅動模型(EventModel)。面對越來越複雜的WEB需求,WEB Form變得異常複雜且難於維護。能把ViewState寫出超過1MB的人大有人在。由此可見,因為對ASP.net頁面生命週期不瞭解而衍生出來的Bug不知道有多少個。在MVC年代,View裡面不應該在又複雜的程式或者是商務邏輯,二十斤留下顯示的部分,如HTML,JavaScript,資料顯示,表單等。然後Controller負責控制其餘部分,由Model負責訪問資料或驗證資料格式----理清彼此之間的責任後才幹編寫出好的“分解關注點”架構,進而提升項目的可維護性。
ASP.net MVC與傳統的ASP.net Web Forms開發有何不同?
ASP.net開發人員都會遇到的惱人問題:
- 邪惡的ViewState,easy導致超大控制項,使程式失控。
- 控制群組件對於HTML的控制不夠直接或太過複雜。
- 不易於採用TDD模式(Test Driven Development 測試驅動開發)進行開發,也不easy編寫單元測試程式。
MVC的長處:
- 清晰的“分解關注點”架構會強迫你寫出較WebForms更易於維護的程式
- 開發性與社區支援
- 可讓你全然控制HTTP的輸出內容
- 優秀的開發效率
- 易於測試的架構
- 易於分工的架構
MVC的缺點:
缺乏工具的支援(和WebForm的那種~~拖的感覺 全然不同)
缺乏成熟的組件化技術的支援(眼下僅僅有ServerControl、HTML Helper)
MVC與Web Forms有哪些同樣之處?
兩者處理網頁的介面事實上都是IhttpHandler,只是WF(WebForm)是IHttpHandler,MVC是當做 MvcHandler類來處理。
必須捨棄WebForm的哪些部分?
MVC中不能使用的技術例如以下:
- ViewState
- ASP.net頁面追蹤機制(Page Trace)
- ASP.net時間驅動模型(EventModel)
- server控制項(ServerControl)大部分不能使用,但沒用在ViewState中的server控制項還是可以用於顯示
- Default SiteMap Provider
MVC和WF簡單的功能對比
| 支援功能 |
Web Form |
MVC1.0/2.0 |
| ViewState |
√ |
x |
| PageTrace |
√ |
x |
| EventModel |
√ |
x |
| ServerControl |
√ |
部分支援 |
| System.Web.SiteMapProvider |
√ |
x |
| Provider Model |
√ |
√ |
| System.Web.Caching命名空間 |
√ |
√ |
| System.Web.SessionState命名空間 |
√ |
√ |
| System.web.Security命名空間 |
√ |
√ |
| Profile,Membership,SiteMap |
√ |
√ |
| 其它System.Web.*功能 |
√ |
√ |
M、V、C真的能夠獨立開發嗎?
能夠,可是不絕對。M是MVC的架構中心,有了M就能夠讓 C和 V參考這些Model,先定義出來全部計劃開發的Controller和Action然後再建立全部的Action和相應的View。這是眼下效率最高的開發方法。
WF項目能夠逐步轉移到MVC項目嗎?
沒辦法。