谈谈我对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层实现的理解相关推荐

  1. [Vue][面试]谈谈你对MVC、MVP和MVVM的理解

    谈谈你对MVC.MVP和MVVM的理解 答题思路:此题涉及知识点很多,很难说清楚,说透彻,因为MVC,MVP这些我们前端程序员自己甚至都没用过.但是恰恰反映了前端这些年从无到有, 从有到优的变迁过程, ...

  2. Extjs4 MVC 添加view层

    如果这不是您感兴趣或者需要学习的东西,何必点开呢?人生苦短. 实例中我们通过view层望主界面中添加一个grid, 1.app.js改成如下: app.js 1 Ext.Loader.setConfi ...

  3. java mvc view_对Springmvc view层的理解

    MVC框架可以把应用清晰明了地分为三个部分:Model层–数据层,View层–视图层,Controller–逻辑层,Model层负责整合数据,View层负责页面渲染,Controller层负责实现业务 ...

  4. VIEW层AJAX提交表单到Controller的实体(AJAX传递序列化的输入元素)

    在MVC环境中,AJAX方式添加一个对象,这个对象在Models中是一个视图模型,在前台显示时是这样的代码: <%using (Html.BeginForm())       { %>   ...

  5. iOS 应用架构谈:view 层的组织和调用方案

    iOS 应用架构谈:view 层的组织和调用方案 iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用架构谈 动态部署方案 iOS应用架构 ...

  6. MVC中View与后台多次交互操作

    1.MVC中View和Controller多次交互的操作. 前台有数据Table和操作按钮[取消],选中某行数据,点击取消,提交到Controller中,验证选中的数据行是否满足取消的条件,如果不满足 ...

  7. iOS应用架构谈(三):View层的组织和调用方案(下)

    本门心法 重剑无锋,大巧不工. ---- <神雕侠侣> 这是杨过在挑剑时,玄铁重剑旁边写的一段话.对此我深表认同.提到这段话的目的是想告诉大家,在具体做View层架构的设计时,不需要拘泥于 ...

  8. iOS应用架构谈 view层的组织和调用方案

    iOS应用架构谈 开篇  iOS应用架构谈 view层的组织和调用方案  iOS应用架构谈 网络层设计方案  iOS应用架构谈 本地持久化方案及动态部署  iOS应用架构谈 组件化方案 前言 < ...

  9. iOS应用架构谈(2) view层的组织和调用方案

    当我们开始设计View层的架构时,往往是这个App还没有开始开发,或者这个App已经发过几个版本了,然后此时需要做非常彻底的重构. 一般也就是这两种时机会去做View层架构,基于这个时机的特殊性,我们 ...

最新文章

  1. 【OpenCV 4开发详解】图像金字塔
  2. (一) 关于配置travis-ci持续集成python pytest测试的相关记录
  3. elasticsearch安装kibana插件
  4. 【2018.5.19】模拟赛之二-ssl2433 文件名排序【字符串】
  5. 自动计算高度的方法 iOS, height为0, 可以自动计算weith,
  6. 【视觉项目】【day4】8.24号实验记录(消除瓶子内部“边缘”)
  7. TinyMind 和机器之心收藏
  8. Can't use Subversion command line client: svn Probably the path to Subversion executable is wrong
  9. 编译时:virtual memory exhausted: Cannot allocate memory
  10. php ioncube encoder,Ioncube PHP Encoder
  11. 7-1 厘米换算英尺英寸 (15分)
  12. PR视频去水印—中间值
  13. 北京交通大学c语言作业,北京交通大学c语言综合程序设计(黄宇班).doc
  14. zcmu-1359 NBA (水题)
  15. 我经历的IT公司面试及离职感受
  16. U3D RPC网络传输相机画面
  17. jmeter压力测试并发
  18. mfc 子窗口 跟随 主窗口
  19. 做好SEO必备的三步骤
  20. 组件化架构搭建——铺路Android架构师

热门文章

  1. 博客园修改页面显示样式css
  2. java 自定义注解以及获得注解的值
  3. Extjs发票管理系统
  4. php获取字符串扩展,PHP7扩展开发之字符串处理
  5. java中的getfirst_Java LinkedList getFirst()用法及代码示例
  6. C标准时间与时间戳的相互转换
  7. 处理器的用户态和核心态
  8. 内存中发堆和栈,栈是运行时的单位,而堆是存储的单位
  9. Redis持久化方式~RDB 持久化和AOF 持久化
  10. 利用福禄克DSX系列测试仪部署MPTL模块化插头端接链路