热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP一些框架MVC设计的不足之处

目前主流的PHP框架设计模式均为MVC模式,比如yii或codeigniter,均是由控制器接收页面请求,并沟通模型与视图的交互。如果我们把网站整体看作一个矩阵,把网站接收用户请求并处理看作是网站的竖向,而把网站的每一个模块(比如文章模块,投票模块,论坛模块等)看作是网站的横向。

目前主流的PHP框架设计模式均为MVC模式,比如yii或codeigniter,均是由控制器接收页面请求,并沟通模型与视图的交互。如果我们把网站整体看作一个矩阵,把网站接收用户请求并处理看作是网站的竖向,而把网站的每一个模块(比如文章模块,投票模块,论坛模块等)看作是网站的横向。

MVC模式,侧重于竖向即请求、处理、呈现之间的协调,而忽略了模块之间的协调。

当用户发起请求的时候,由哪个模块来处理用户的请求已经确定了,这就使模块之间呈现非常强的独立性,这该怎么理解呢,举个例子来说。 假设现在,你有两个模块,一个是新闻模块,一个是图片模块,新闻模块展示一些新闻文章,图片模块用来展示图片。 如果用MVC,我们这样实现:定义两个控制器news,pic,两个模型news_model,pic_model,两个视图 news_view,pic_view,当有用户请求news控制器时,先调用news_model取得需要的数据,再用这些数据渲染 news_view,最后呈现给用户。

有一天,你的领导忽然有了新想法,HEY,伙计,新闻模块只显示新闻太单调,让新闻模块,能显示图片模块里最热门的图片。这下不好办了,new_model里没有图片相关的模型,news_view里也没有显示图片列表的视图。你有解决办法?把显示图片列表相关的模型和视图分别复制一份到news的模型和视图?不,这么做不好,如果我现在全站都要显示热门图片列表你怎么办?还复制吗?不可以的。后期维护会累死人。

在codeigniter框架里,有更好一点儿的解决办法,就是把显示图片列表这个功能做 成一个library,每需要的地方,调用library就可以,因为library有与控制器相同的沟通模型视图的功能。但这会带来一个新的问题:数据 共享,如果页面分割成不同的library来实现,不同的library的数据很难共享,library之间是完全独立的。

现在来看,这一切的一切都是因为mvc模式注重竖向的沟通,而忽略了横向的沟通,完全割裂了模块之间的关系。

模块沟通

TextPattern(简称TXP)是一个小型的BLOG系统,它最大的特点是注重模块之间的沟通,完全模糊了不同模块间的界限,对与用户的一个请求,TXP完全没必要知道用户请求的是什么模块,新闻还是图片,只需要知道请求的页面要呈现些什么功能点。每一个小功能点都是完全独立的。

这是一种视图驱动的模式,接收到用户请求后,首先取到要请求的视图,视图文件再调用不同的功能点,这样就弱化了模块之间独立性。通俗点儿说:用户想看什么,你就给什么,不要管它是不是同一个模块,是不是有关系。wordpress也是基于视图驱动的模式的。

HMVC

层叠式的MVC,这是MVC模式的升级版本。首先把系统按功能点分,每个功能点的实现再采用MVC模式。HMVC同时兼顾了横向和竖向的沟通。

我所认为理想的模式:基于视图驱动的HMVC,基于视图驱动,就是以用户为基础,呈现用户想看到,以需求为驱动才是正确的。HMVC保证了代码的重用,易于维护。

视图驱动,可以借鉴WORDPRESS的实现,因为wordpress的模板开发、替换很容易;横向沟通的实现可以借鉴TXP;竖向沟通就是典型的MVC了。

本文地址:http://www.nowamagic.net/librarys/veda/detail/1693,欢迎访问原出处。


推荐阅读
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • Python开源库和第三方包的常用框架及库
    本文介绍了Python开源库和第三方包中常用的框架和库,包括Django、CubicWeb等。同时还整理了GitHub中最受欢迎的15个Python开源框架,涵盖了事件I/O、OLAP、Web开发、高性能网络通信、测试和爬虫等领域。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • 本文介绍了ASP.NET Core MVC的入门及基础使用教程,根据微软的文档学习,建议阅读英文文档以便更好理解,微软的工具化使用方便且开发速度快。通过vs2017新建项目,可以创建一个基础的ASP.NET网站,也可以实现动态网站开发。ASP.NET MVC框架及其工具简化了开发过程,包括建立业务的数据模型和控制器等步骤。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文讲述了作者从最初对软件工程的选择迷茫到逐渐喜欢并坚持学习的经历。作者在大学期间通过学习专业课和参与项目开发,不断挑战自己并取得成就感。虽然曾考虑过转专业和复读,但最终决定坚持学习软件工程,并为自己的未来努力奋斗。作者还提到了大学生活与自己最初的预期不同,但对此并没有太多抱怨。 ... [详细]
  • 使用J2SE模拟MVC模式开发桌面应用程序的工程包的介绍
    以我开发过的一个娱乐管理系统为例:下图为我系统的业务逻辑的MVC流程:下图为以Eclipse开发中各包的说明:转载于:https:blog ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
author-avatar
_陈灵宝互粉号2
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有