MVC框架可以把應用清晰明了地分為三個部分:Model層–數據層,View層–視圖層,Controller–邏輯層,Model層負責整合數據,View層負責頁面渲染,Controller層負責實現業務邏輯。
我在這里簡單說一下我對MVC框架中的View層的理解。
View層一般包含兩個部分:View類和模版文件,View類並不是必需的,采用View類可以整合代碼,因為有時候View層也會有一些復雜的邏輯和數據讀取的操作,這些操作最好放在類(或者對象)中實現,如果直接在模版文件中實現,會讓模版文件很凌亂,不利於代碼復用和后期維護。
對於一個Web應用來說,整個應用的風格和頁面布局需要保持一致,那么聰明的小伙伴是否聯想到了代碼復用?假如這個應用一共有200個頁面,如何實現“只需在代碼中修改一處,就可以修改所有頁面的共用部分?”,這是一個非常重要的功能,要不然頁面上每一個小改動都需要重復200次,其中難免出錯,維護代價高昂。
代碼復用的基本思想是“模塊化”,每個模塊只負責一小部分功能,整個應用的功能就是這些模塊的排列和組合,這個思想運用在View層就可以實現上面提到的問題。
那么如何將“模塊化”的思想運用在View層的實現上呢?
首先,需要分析web應用頁面渲染的特點。一般的,大部分頁面共用一個基本布局(基本布局之外沒有web內容),在基本布局里面進行划分,比如划分為上下布局,左右布局等,然后再在划分好的小塊中再進行布局划分,以此類推,直到完成一個頁面的布局。因為一個Web應用的風格和大體布局是一致的,所以上面划分出來的布局中,一部分布局是可以共用的。每一次划分所產生的塊都是“模塊”,這些“模塊”都可以復用,頁面與頁面之間共用的塊,可以通過調用相同的“模塊”來實現,需要修改的時候,只需修改“模塊”即可,這樣就可以達到“只需在代碼中修改一處,就可以修改所有頁面的共用部分”。
那么如何划分布局呢?(如何把我腦海中對頁面布局的划分告訴Web應用?)
我的兩種方案:
1. 在每個模塊中實現對它所包含的子模塊的調用。這樣,只需要“手動”調取出第一個模塊,就可以調取出所有它的子模塊,從而完成整個頁面的渲染。這個方法的缺點是“環環相扣”並且沒法快速查看,如果某個模塊渲染不正確,只能一級一級地往上追溯。“環環相扣”導致模塊與模塊之間的關系非常緊密,有悖於“模塊化”的思想。
2. 為每一個頁面單獨設置一個布局的.xml文件,在這個文件中,規定好頁面的布局划分,哪個模塊包含哪些子模塊就一目了然,便於快速定位問題。缺點是.xml文件的解析難度很大,解析.xml文件也非常吃性能,如果頁面布局復雜,維護.xml也會非常麻煩。
我比較偏向於第2個方案,第1個方案還有一個非常致命的缺點:頁面的渲染過程是逐級展開的,需要在關鍵節點進行“干預”,使上級模塊調取合適的子模塊,這也是一個難點,如果需要干預的點太多,就會非常麻煩並且非常凌亂。相比之下,方案2只需要維護.xml文件,只要編寫一個完善的解析函數,就可以很好的工作,如果解析.xml文件對性能造成較大影響,可以把解析.xml后所得的布局對象或者數據結構保存在NoSQL數據庫中作為緩存(畢竟頁面布局不會修改的很頻繁),這樣可在一定程度上減輕解析.xml文件對性能的影響。
再進一步
有沒有發現,上述的第2方案,“為每一個頁面單獨設置一個布局的.xml文件”會導致眾多.xml文件中都會包含大量的重復代碼,因為大部分頁面的布局有很多位置是相同的或相近似的,所以可以對.xml文件作一些優化,把.xml文件中重復的部分分離出來,單獨維護,這樣.xml文件的內容就會清爽很多。
如果您覺得閱讀本文對您有幫助,歡迎轉載本文,但是轉載文章之后必須在文章頁面明顯位置保留此段聲明,否則保留追究法律責任的權利。
作 者:blog.jpdou.top