谈谈我对MVC的View层实现的理解
谈谈我对MVC的View层实现的理解
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文件的内容就会清爽很多。
如果您觉得阅读本文对您有帮助,欢迎转载本文,但是转载文章之后必须在文章页面明显位置保留此段声明,否则保留追究法律责任的权利。
转载于:https://www.cnblogs.com/zhanghaiyang/p/7212831.html
谈谈我对MVC的View层实现的理解相关推荐
- [Vue][面试]谈谈你对MVC、MVP和MVVM的理解
谈谈你对MVC.MVP和MVVM的理解 答题思路:此题涉及知识点很多,很难说清楚,说透彻,因为MVC,MVP这些我们前端程序员自己甚至都没用过.但是恰恰反映了前端这些年从无到有, 从有到优的变迁过程, ...
- Extjs4 MVC 添加view层
如果这不是您感兴趣或者需要学习的东西,何必点开呢?人生苦短. 实例中我们通过view层望主界面中添加一个grid, 1.app.js改成如下: app.js 1 Ext.Loader.setConfi ...
- java mvc view_对Springmvc view层的理解
MVC框架可以把应用清晰明了地分为三个部分:Model层–数据层,View层–视图层,Controller–逻辑层,Model层负责整合数据,View层负责页面渲染,Controller层负责实现业务 ...
- VIEW层AJAX提交表单到Controller的实体(AJAX传递序列化的输入元素)
在MVC环境中,AJAX方式添加一个对象,这个对象在Models中是一个视图模型,在前台显示时是这样的代码: <%using (Html.BeginForm()) { %> ...
- iOS 应用架构谈:view 层的组织和调用方案
iOS 应用架构谈:view 层的组织和调用方案 iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用架构谈 动态部署方案 iOS应用架构 ...
- MVC中View与后台多次交互操作
1.MVC中View和Controller多次交互的操作. 前台有数据Table和操作按钮[取消],选中某行数据,点击取消,提交到Controller中,验证选中的数据行是否满足取消的条件,如果不满足 ...
- iOS应用架构谈(三):View层的组织和调用方案(下)
本门心法 重剑无锋,大巧不工. ---- <神雕侠侣> 这是杨过在挑剑时,玄铁重剑旁边写的一段话.对此我深表认同.提到这段话的目的是想告诉大家,在具体做View层架构的设计时,不需要拘泥于 ...
- iOS应用架构谈 view层的组织和调用方案
iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用架构谈 本地持久化方案及动态部署 iOS应用架构谈 组件化方案 前言 < ...
- iOS应用架构谈(2) view层的组织和调用方案
当我们开始设计View层的架构时,往往是这个App还没有开始开发,或者这个App已经发过几个版本了,然后此时需要做非常彻底的重构. 一般也就是这两种时机会去做View层架构,基于这个时机的特殊性,我们 ...
最新文章
- 【OpenCV 4开发详解】图像金字塔
- (一) 关于配置travis-ci持续集成python pytest测试的相关记录
- elasticsearch安装kibana插件
- 【2018.5.19】模拟赛之二-ssl2433 文件名排序【字符串】
- 自动计算高度的方法 iOS, height为0, 可以自动计算weith,
- 【视觉项目】【day4】8.24号实验记录(消除瓶子内部“边缘”)
- TinyMind 和机器之心收藏
- Can't use Subversion command line client: svn Probably the path to Subversion executable is wrong
- 编译时:virtual memory exhausted: Cannot allocate memory
- php ioncube encoder,Ioncube PHP Encoder
- 7-1 厘米换算英尺英寸 (15分)
- PR视频去水印—中间值
- 北京交通大学c语言作业,北京交通大学c语言综合程序设计(黄宇班).doc
- zcmu-1359 NBA (水题)
- 我经历的IT公司面试及离职感受
- U3D RPC网络传输相机画面
- jmeter压力测试并发
- mfc 子窗口 跟随 主窗口
- 做好SEO必备的三步骤
- 组件化架构搭建——铺路Android架构师