- 浏览: 156403 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
NickWar:
脚本很好用,感谢楼主分享
但我只能导出10篇文档的xml ...
原创使用google reader + PHP将iteye博客数据导入到wordpress中 -
再逢山水:
ninedoors 写道这位仁兄,还有一个问题,感觉挺诡异的, ...
ThinkPHP中M和D函数的区别 -
ninedoors:
这位仁兄,还有一个问题,感觉挺诡异的,却不知道原因。我在用th ...
ThinkPHP中M和D函数的区别 -
柏新星:
谢谢 最起码简单的了解了一些 呵呵
stdClass的介绍
MVC架构模式已不再是新技术,也不再是新名词。但是,如果你能大概看一看因内的开源的PHP开发框架,或者国内的PHP开源软件。我们不难发现,很多这们的代码与其说是MVC,还不如称其为东施效颦。很多是为MVC而MVC。或者,只提供MVC的部分功能。而不是真正意义上的MVC。这其中,很多原因当然是软件开发者不懂得设计模式,不了解MVC的根本目的。
由此,我们先明确一下,MVC的根本目的有哪些:
1、分工:使用MVC可以把数据库开发,程序业务逻辑开发,页面开发分开。
多数人说起MVC的好处,仅限于这一点。认为,MVC不外乎是利于大型团队合作。其实是大错特错了。
2、松耦合。如果不懂得设计模式,根本不知松耦合是什么意思。当然,可以简单说明一下:
我们把模块部分,分为数据库抽象层,数据操作层,和业务逻辑层。这是最简单的业务架构。这样分开的好处是什么?
数据库抽象层,一般会支持多种数据库。这样做的目的,是可以让你的应用快速更换数据库。也能方便你的应用与其它类型数据库交互。
同时,更强大的,还会有链接管理器,从而对大型网站的分库操作,分表操作的支持。
一般,数据库抽象层可以通过向导生成静成的ORM层,或直接提供动态的ORM层(这是最新的DRYSQL模式)。
但除了ORM,CRUD,还有其它的查询。MVC中仍是要求将其写到专门的数据操作模块中的。
为什么要这样做呢?这就是松耦合。当一部分改动,不会影响另一部分。
试想,如果将数据模块与业务模块混合在一起,那么,如果某一日更换数据库,则,你要修改的是庞大的模块部分的代码。但将数据模块独立出来,只要修改数据模块部分的SQL语句即可以了。
对于视图部分,实际也是一样。因为,本来是给PC浏览器用的,如果哪一天要加上手机页面,则只要添加就可以了,其它的都可以共用,但若不分开,就得重新做一套。
从这一点看,有人说,PHP不适合于使用框架,实际上,不用框架,很多是行不通的。
可以看出其目标:这也就实现了,出现问题只要修改一处。而不是修改多处。
3、共享与集中处理。
控制器,是一个完全将流程按面向对象方式设计的程序流程中的组件。我们应当能够记得,最普通的PHP程序写法,页头包含SESSION模块,然后是访问控制。但若想,增加对主机名,子域名控制,则每一个包含的页面,都要再次增加包含。或要在SESSION模块,或访问控制模块增加一个包含文件。于是,程序逻辑变得相当混乱。如果其中有出错与跳转,那么,势必会出现在不需要加载的页面跳来跳去。
控制器的目的,就是让页面请求最终到达所需要的页面。并且是基于面向对象的流程的。
通常:控制器,必须要有Host, SubDomain, IP,URL,ACL的路由检测。由于现在一个网站,同时有浏览器与手机的,所以,还要有UserAgent检测。控制器要能做到最为方便地将一个请求映射到一个模块类的一个方法(事件)中。
4、完全面向对象
MVC程序,多数只有一个客户端请求入口——bootstrap,应用往往基于这个文件进行配置或修改。其它的全部都是class。即实现客户端到服务器端的事件映射。这样做的目的,是将应用的流程规范到了一个完全面向对象的流程中。保证程序的可读性,从而保证与程序员的无关性。
5、目前流行的开放API
如果是良好的MVC架构,开放API只要直接调用数据操作层接口就能实现,这也大大节省了程序的开发量,同时增加了代码的公用与集中处理的能力。这也就实现了,出现问题只要修改一处。
6、视图问题:因为界面的需求是多样的,不断变化的,往往对于WEB模式的企业应用更加显示出这样的变化。目前,可悲的是,PHP仍没有象.net,或flex相似的视图模式。只有JAVA,有Typstray,JFS这样的面向部件的视图模式,PHP目前均没有成熟的开源产品可用。虽说,Smarty抄袭了struts,phpFACES抄袭了JFS,但是本质上,均没有完全体充分利用PHP的语言的长处。phpFACES则更是无人问津,国内几乎无人使用。而FLAX RIA的冲击,以及JS框架带来的RIA新技术,也没有能与后端PHP相结合。JSP落后,PHP一样也是落后。人们需要新的开源。当然,phpFACES可以说是这方面的先驱,因为,它是基于DOJO创建的组件库。
7、插件技术:一个好的开发框架。所有的扩展应当均是由插件式方来完成的。但现在有多少框架支持插件?官方的Zend可以说是大全,而不是插件式配置,这纯属是技术误导。当然,最好的,插件最多的,则是symfony. 而symfony的ORM还在使用Propel,没能用上最新的DRYSQL技术。就插件而言,很多情况下限制了软件的应用,推广与发展,比如,大名鼎鼎的WordPress,提供了完美的应用插件,但底层开发框架极为混乱。最简单的,只能用于Mysql数据库,谁要是想用Oracle,那你的恶梦就开始了。所以,一个好的框架,应当在任何一个层面均支持插件。插件由此可以大概分为:数据库驱动插件,数据模块插件,缓存驱动插件,图型库插件等功能类插件,同时还有应用类插件。现时代,没有插件技术,就没有成功可言。也只有支持插件,才能够实现无限扩展,通用性才不是空话。但是,从国内行业论坛上来看,没有专门讨论插件接口实现技术的相关的话题,高处不胜寒!!
8、开发框架的架构:一个WEB应用架构,其内核应当是一个好的开发框架,这一个框架,必须要有的核心是:App对象,一个给入口文件用来完成一切事务的聚合类,AutoLoader 装载器,uxConfig 配置文件读取,uxLocale 本地化管理,Model 模型,View 视图,Controller 控制器(主机,子域名,URI,UA,IP,ACL均需要支持),Exception ErrorHandle错误与异常管理,Security 安全管理(Validator 数据验证,Filter 数据过滤器)状态管理(Session 会话管理,Cache 缓存管理)。然后是应用必须的基本类库,其中,数据库排第一位。架构中所以把数据库放到类库而不是放到内核,主要是两个方面,其一,让用户有选择权,用户可以选择用框架本身的,也可以去选ADODB,DOCTRINE,PEOPEL等第三方的。其次,网站规模的变化,数据库层面变化是最快的。但现在有多少开发框架有这样的规范的架构?
由此,我们发现:MVC架构模式中的种种误区不外乎来源于两个方面:
其一是:人们的认识造成的。PHP开发队伍技术落后,素质差是一大本质原因。对软件架构的不了解,特别是面向对象,设计模式的不了解,从而无法深入理解MVC。
这与PHP自身发展也有关系,PHP4以前,是不支持面向对象的。PHP是以简易吸引了大量用户。但一旦用于大型网站开发,对于这此嫌JSP烦锁的人,恶梦就开始了。
其二是:PHP开发框架发以及开源技术发展密切相关的,开发框架对MVC不能提供足够好的MVC架构支持,同时,没有足够好的开源组件,使得人们不能进一步理解MVC。如同,你用了PHP的ADODB,但它也不会要求你在程序中,要把数据模块与业务模块分开。这是架构师的责任。然而,中国PHP行业有多少网络应用架构师?比如,敏捷之履上海活动时,杭州某大公司的某外籍CTO大讲特讲PHP根本不需要框架,云云,这不能不反映出国内PHP行业技术的落后。现实是如此残酷。唯有正视软件产业的现状。
由此,我们先明确一下,MVC的根本目的有哪些:
1、分工:使用MVC可以把数据库开发,程序业务逻辑开发,页面开发分开。
多数人说起MVC的好处,仅限于这一点。认为,MVC不外乎是利于大型团队合作。其实是大错特错了。
2、松耦合。如果不懂得设计模式,根本不知松耦合是什么意思。当然,可以简单说明一下:
我们把模块部分,分为数据库抽象层,数据操作层,和业务逻辑层。这是最简单的业务架构。这样分开的好处是什么?
数据库抽象层,一般会支持多种数据库。这样做的目的,是可以让你的应用快速更换数据库。也能方便你的应用与其它类型数据库交互。
同时,更强大的,还会有链接管理器,从而对大型网站的分库操作,分表操作的支持。
一般,数据库抽象层可以通过向导生成静成的ORM层,或直接提供动态的ORM层(这是最新的DRYSQL模式)。
但除了ORM,CRUD,还有其它的查询。MVC中仍是要求将其写到专门的数据操作模块中的。
为什么要这样做呢?这就是松耦合。当一部分改动,不会影响另一部分。
试想,如果将数据模块与业务模块混合在一起,那么,如果某一日更换数据库,则,你要修改的是庞大的模块部分的代码。但将数据模块独立出来,只要修改数据模块部分的SQL语句即可以了。
对于视图部分,实际也是一样。因为,本来是给PC浏览器用的,如果哪一天要加上手机页面,则只要添加就可以了,其它的都可以共用,但若不分开,就得重新做一套。
从这一点看,有人说,PHP不适合于使用框架,实际上,不用框架,很多是行不通的。
可以看出其目标:这也就实现了,出现问题只要修改一处。而不是修改多处。
3、共享与集中处理。
控制器,是一个完全将流程按面向对象方式设计的程序流程中的组件。我们应当能够记得,最普通的PHP程序写法,页头包含SESSION模块,然后是访问控制。但若想,增加对主机名,子域名控制,则每一个包含的页面,都要再次增加包含。或要在SESSION模块,或访问控制模块增加一个包含文件。于是,程序逻辑变得相当混乱。如果其中有出错与跳转,那么,势必会出现在不需要加载的页面跳来跳去。
控制器的目的,就是让页面请求最终到达所需要的页面。并且是基于面向对象的流程的。
通常:控制器,必须要有Host, SubDomain, IP,URL,ACL的路由检测。由于现在一个网站,同时有浏览器与手机的,所以,还要有UserAgent检测。控制器要能做到最为方便地将一个请求映射到一个模块类的一个方法(事件)中。
4、完全面向对象
MVC程序,多数只有一个客户端请求入口——bootstrap,应用往往基于这个文件进行配置或修改。其它的全部都是class。即实现客户端到服务器端的事件映射。这样做的目的,是将应用的流程规范到了一个完全面向对象的流程中。保证程序的可读性,从而保证与程序员的无关性。
5、目前流行的开放API
如果是良好的MVC架构,开放API只要直接调用数据操作层接口就能实现,这也大大节省了程序的开发量,同时增加了代码的公用与集中处理的能力。这也就实现了,出现问题只要修改一处。
6、视图问题:因为界面的需求是多样的,不断变化的,往往对于WEB模式的企业应用更加显示出这样的变化。目前,可悲的是,PHP仍没有象.net,或flex相似的视图模式。只有JAVA,有Typstray,JFS这样的面向部件的视图模式,PHP目前均没有成熟的开源产品可用。虽说,Smarty抄袭了struts,phpFACES抄袭了JFS,但是本质上,均没有完全体充分利用PHP的语言的长处。phpFACES则更是无人问津,国内几乎无人使用。而FLAX RIA的冲击,以及JS框架带来的RIA新技术,也没有能与后端PHP相结合。JSP落后,PHP一样也是落后。人们需要新的开源。当然,phpFACES可以说是这方面的先驱,因为,它是基于DOJO创建的组件库。
7、插件技术:一个好的开发框架。所有的扩展应当均是由插件式方来完成的。但现在有多少框架支持插件?官方的Zend可以说是大全,而不是插件式配置,这纯属是技术误导。当然,最好的,插件最多的,则是symfony. 而symfony的ORM还在使用Propel,没能用上最新的DRYSQL技术。就插件而言,很多情况下限制了软件的应用,推广与发展,比如,大名鼎鼎的WordPress,提供了完美的应用插件,但底层开发框架极为混乱。最简单的,只能用于Mysql数据库,谁要是想用Oracle,那你的恶梦就开始了。所以,一个好的框架,应当在任何一个层面均支持插件。插件由此可以大概分为:数据库驱动插件,数据模块插件,缓存驱动插件,图型库插件等功能类插件,同时还有应用类插件。现时代,没有插件技术,就没有成功可言。也只有支持插件,才能够实现无限扩展,通用性才不是空话。但是,从国内行业论坛上来看,没有专门讨论插件接口实现技术的相关的话题,高处不胜寒!!
8、开发框架的架构:一个WEB应用架构,其内核应当是一个好的开发框架,这一个框架,必须要有的核心是:App对象,一个给入口文件用来完成一切事务的聚合类,AutoLoader 装载器,uxConfig 配置文件读取,uxLocale 本地化管理,Model 模型,View 视图,Controller 控制器(主机,子域名,URI,UA,IP,ACL均需要支持),Exception ErrorHandle错误与异常管理,Security 安全管理(Validator 数据验证,Filter 数据过滤器)状态管理(Session 会话管理,Cache 缓存管理)。然后是应用必须的基本类库,其中,数据库排第一位。架构中所以把数据库放到类库而不是放到内核,主要是两个方面,其一,让用户有选择权,用户可以选择用框架本身的,也可以去选ADODB,DOCTRINE,PEOPEL等第三方的。其次,网站规模的变化,数据库层面变化是最快的。但现在有多少开发框架有这样的规范的架构?
由此,我们发现:MVC架构模式中的种种误区不外乎来源于两个方面:
其一是:人们的认识造成的。PHP开发队伍技术落后,素质差是一大本质原因。对软件架构的不了解,特别是面向对象,设计模式的不了解,从而无法深入理解MVC。
这与PHP自身发展也有关系,PHP4以前,是不支持面向对象的。PHP是以简易吸引了大量用户。但一旦用于大型网站开发,对于这此嫌JSP烦锁的人,恶梦就开始了。
其二是:PHP开发框架发以及开源技术发展密切相关的,开发框架对MVC不能提供足够好的MVC架构支持,同时,没有足够好的开源组件,使得人们不能进一步理解MVC。如同,你用了PHP的ADODB,但它也不会要求你在程序中,要把数据模块与业务模块分开。这是架构师的责任。然而,中国PHP行业有多少网络应用架构师?比如,敏捷之履上海活动时,杭州某大公司的某外籍CTO大讲特讲PHP根本不需要框架,云云,这不能不反映出国内PHP行业技术的落后。现实是如此残酷。唯有正视软件产业的现状。
发表评论
-
PHP stream_context_create()作用和用法分析
2013-04-03 10:28 0创建并返回一个文本数据流并应用各种选项,可用于fopen(), ... -
PHP - Iterator接口的解释
2012-12-06 14:23 902Iterator的接口定义如下: Iterato ... -
php中exec,system及passthru等函数用法
2012-08-13 10:49 1072由于PHP基本是用于WEB程 ... -
HTTP协议状态码详解(HTTP Status Code)
2012-08-13 10:41 1016使用php或者javascript都会 ... -
spl_autoload_register 函数详解
2012-06-19 11:45 6722spl_autoload_register (PHP 5 &g ... -
PHP 程序员学数据结构与算法之《栈》
2012-11-24 17:01 1254介绍 “要成高 ... -
MySQL字段类型
2012-03-13 12:21 894MySQL支持大量的列类型 ... -
20个数据库设计的最佳实践
2012-02-27 10:33 11131、使用定义明确的表或列名,并保持一致(例如,School、S ... -
PHP中curl_setopt的CURLOPT系列 选项(转)
2012-01-17 15:41 3453curl_setopt()函数将为一个CURL会话设置选项。 ... -
2011年最热门的开源PHP项目回顾
2012-01-01 12:07 1179本文来自于对活跃在SourceForge和GitHub上的项目 ... -
PHP开发者常犯的10个MySQL错误
2012-01-01 12:03 917数据库是WEB大多数应用 ... -
PHP XML操作类DOMDocument
2011-08-29 14:18 1377不得不自已写一个.XML ... -
二十五个顶级PHP模板引擎整理
2011-08-09 17:20 1051为了找到一个好的模板引擎,我在互联网上进行搜索,目前已经整理出 ... -
php接收二进制数据流转换成图片
2011-08-04 17:49 11460<?php /** * 图片类 * @au ... -
PHP性能优化贴士——产生高度优化代码
2011-07-19 09:43 989PHP是一种在服务器端执 ... -
PHP register_shutdown_function函数详解
2011-07-18 11:47 1427脚本时常死掉,而且并不总是那么好看. 我们可不想给用户 ... -
PHP程序员最常犯的11个MySQL错误
2011-06-30 15:58 721对于大多数web应用来说,数据库都是一个十分基础性的部 ... -
简述MVC思想与PHP如何实现MVC
2011-06-20 11:17 889我相信已经有很多这样 ... -
PHP中的生成XML文件的4种方法
2011-06-15 11:56 2515<?xml version="1.0&qu ... -
stdClass的介绍
2011-06-02 10:11 1103在PHP开发中,很多时候都会看到别人的代码里有 $use ...
相关推荐
MVC架构模式是一种广泛应用在软件开发中的模式,其目的是为了将软件的业务逻辑、数据和用户界面分离开来,以此来提高系统的可维护性和可扩展性。MVC模式的全称是Model-View-Controller,即模型-视图-控制器。在Java...
MVC架构是一种经典的架构模式,主要用于实现用户界面与业务逻辑的分离,提高系统的可维护性和灵活性。具体来说: - **Model(模型)**:负责管理和存储数据,处理业务逻辑。它直接与数据库或其他数据源交互,处理...
在ASP.NET中,MVC架构是一种常见的架构模式,它可以帮助开发者快速构建Web应用程序。MVC架构的优点是可以降低耦合度,提高代码的复用性和灵活性。同时,MVC架构也提供了一种灵活的方式来创建对象,客户端可以根据...
介绍了模式的分类,引出了MVC架构模式,继而介绍了:MVC架构模式的起源与设计思想、三大部分的功能与关系、MVC架构模式的实现、MVC架构模式的优缺点
这种架构模式将应用程序的不同部分分离,使代码更易于维护和扩展。以下是关于PHP MVC架构搭建的详细说明: 1. **MVC概念解析** - **Model(模型)**:模型层是应用的核心,负责与数据存储交互,如数据库操作,业务...
**MVC架构模式详解** **一、什么是MVC架构模式** MVC,即Model-View-Controller,是一种软件设计模式,常用于构建Web应用程序。它将应用分为三个主要部分:模型(Model)、视图(View)和控制器(Controller),...
MVC架构模式是软件工程中的一种经典设计模式,广泛应用于Web开发。它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据和业务逻辑,视图则负责展示数据,而控制器...
**PHP MVC架构模式详解** PHP MVC(Model-View-Controller)架构模式是Web开发中广泛采用的一种设计模式,它将应用程序的逻辑分为三个主要部分,从而实现数据、业务逻辑和用户界面的分离,提高代码的可维护性和可...
MVC架构模式在Java开发中的应用 MVC架构模式是系统开发中较常用的开发模式,它将系统分成三个核心部件:模型(Model)、视图(View)和控制器(Controller)。本文将MVC架构模式引入开发模式中,讨论MVC架构开发...
MVC 设计模式是软件架构中的一种经典设计模式,广泛应用于 Java Web 开发中。MVC 模式将应用程序分为三个主要部分:Model(模型)、View(视图)和 Controller(控制器),每个部分都有其特定的职责和功能。 MVC ...
在软件开发领域,Model-View-Controller(MVC)架构是一种广泛应用的设计模式,尤其是在图形用户界面(GUI)的开发中。Qt,一个流行的跨平台应用开发框架,也支持MVC模式,使得开发者能够构建可扩展且易于维护的复杂...
基于PHP语言的MVC架构设计是软件工程中的一种软件架构模式,将软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展...
在实际的Web开发中,许多框架都采用了MVC架构,例如Java的Spring MVC,ASP.NET的MVC,以及PHP的Laravel等。这些框架提供了丰富的工具和库,简化了开发过程,使得开发者能够更高效地实现MVC架构。 **总结** MVC架构...
在本文档中,主要探讨了J2EE系统构架和设计模式,特别是层架构和MVC架构模式的应用。首先,文档介绍了架构(Architecture)与模式(Pattern)的区别和联系。架构关注的是软件系统的高层设计,而模式则是从实践中提炼...
帮助初学者理解MVC多层架构模式开发流程图及说明.
在PHP中实现MVC模式,可以使用现成的框架,如Laravel、Symfony、CodeIgniter等,这些框架都内置了MVC架构。例如,Laravel的控制器定义在`app/Http/Controllers`目录下,模型位于`app/Models`,而视图存储在`...
MVC架构图书管理系统是一个基于Eclipse开发环境的项目,其核心设计模式采用了Model-View-Controller(MVC)架构。这种架构在IT行业中被广泛应用,特别是在Web应用开发中,因为它能够有效地分离业务逻辑、数据处理与...
MVC(Model-View-Controller)是一种广泛应用于Web开发中的架构模式,特别适合大型复杂系统的组织和管理。MVC的主要思想是将应用程序分为三个核心组件: 1. **模型(Model)**:模型是应用程序的核心,负责存储和...
综上所述,MVC模式作为软件开发中的一种重要设计理念,通过其独特的架构模式,为开发者提供了一种高效、灵活和可扩展的解决方案。然而,是否采用MVC模式以及如何实施,都需要根据具体的项目需求和团队技能进行综合...