mvc路由原理 php_PHP MVC原理及实现-程序员宅基地

技术标签: mvc路由原理 php  

一、mvc原理

mvc是一种程序开发设计模式,它实现了显示模块与功能模块的分离。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。它主要分模型、视图、控制器三层。

模型(model)它是应用程序的主体部分,主要包括业务逻辑模块(web项目中的Action,dao类)和数据模块(pojo类)。模型 与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性

视图(view) 用户与之交互的界面、在web中视图一般由jsp,html组成

控制器(controller)接收来自界面的请求 并交给模型进行处理 在这个过程中控制器不做任何处理只是起到了一个连接的做用

二、MVC的优点

可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。

视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。

模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。

潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。

三、MVC的不足之处

增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。

视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

目前,一般高级的界面工具或构造器不支持模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成MVC使用的困难。

三、MVC演示示例

为了更好的演示MVC的工作方式,我们使用了一个简单的新闻文章发布系统作为例子。我们只作一个基本的演示,从数据库里读出一些文章列表,并在页面上显示。

model:

function get_articles()

{

mysql_connect(…);

$result = mysql_query('select * from news order by article_date desc');

$articles = array();

while ($row = mysql_fetch_objects($result)) {

$articles[] = $row;

}

return $articles;

}

?>

controller:

$articles = get_articles();

display_template('articles.tpl');

?>

view:

News Articles

<?php echo $row->headline ?>

<?php echo $row->body ?>

将PHP代码直接写到HTML文件中,感觉不是很专业,也不安全。使用MVC会遇到其他一些问题,比如模板解析、路由转发等,不过这些都是后话了。这里只是简单演示下MVC的一个过程。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_28752709/article/details/113417238

智能推荐

linux主机的内存最大容量_linux 主机容量-程序员宅基地

文章浏览阅读447次。[root@rhel63single ~]# dmidecode -t 16# dmidecode 2.11SMBIOS 2.4 present.Handle 0x00E2, DMI type 16, 15 bytesPhysical Memory ArrayLocation: System Board Or MotherboardUse: System Memory_linux 主机容量

linux使用入门教程_linux教程入门教程-程序员宅基地

文章浏览阅读4.5k次,点赞9次,收藏95次。说实话在第一次接触Linux系统时,确实很不习惯,尤其是在用了多年的Windows后,可是项目需要又不得不顶着头皮去学习了,下面就自己一点点摸索做下总结,以供后面学习。1、安装Linux系统由于Linux的开源性,我们可以有很多选择,常见的有Ubuntu,centos,Fedora, Debian ,RedhatEnterpriseLinux ,SUSE OpenSUSE,Mindriva, Gentoo, Arch , Slackware等等这些主流发行版几乎占据了大多份额。这里我选择的是Ubun_linux教程入门教程

POJ2299 Ultra-QuickSort(树状数组+离散化)-程序员宅基地

文章浏览阅读184次。POJ2299 Ultra-QuickSort(树状数组+离散化)_poj2299

牛顿插值算法-程序员宅基地

文章浏览阅读637次。###差商定义称 **f [ x0 , xk ] = ( f ( xk ) - f ( x0 ) ) / ( xk - x0 )为函数f(x)关于点x0,xk**的一阶差商(或者均差)######0阶差商f[x0] = f(x0)f[x1] = f(x1)…f[xk] = f(xk)######二阶差商f [x0 , x1 , x2] = ( f [ x1 , x2 ] - f [ x0 , x1 ] ) / (x2 - x0)######K阶差商f [x0 , x1 , …, x

windows在当前目录打开c.m.d(控制台)_当前目录启动控制台-程序员宅基地

文章浏览阅读834次。1.进入任意一个文件夹2.看上方目录3.在这里输入cmd,并回车_当前目录启动控制台

kernel(十一)I2C_i2c kernel-程序员宅基地

文章浏览阅读878次。S5PV210 自带 3 个 I2C 模块, TQ210 使用的是 I2C0,挂接的是 AT24C02。三星提供了 I2C 的总线驱动: drivers/i2c/busses/i2c-s3c2410.c支持多种处理器,包括 s5pv210(和 s3c2440 兼容),同理,三星公用的 I2C 平台设备定义在arch/arm/plat-samsung/devs.c默认为 s3..._i2c kernel

随便推点

Mysql(Mariadb)数据库主从复制-程序员宅基地

文章浏览阅读45次。2019独角兽企业重金招聘Python工程师标准>>> ...

序列数据波峰识别以及波峰形状识别-程序员宅基地

文章浏览阅读3.1k次,点赞3次,收藏33次。转载请注明出处:https://www.cnblogs.com/bethansy/p/10560341.html1、波峰识别 序列数据是按照时间进行采集,其中400个点一个周期,一条数据共10个周期,即4000个点。 首先针对序列数据判断每个周期是否存在波峰,并在存在波峰的情况下进行波峰形状识别。 其中波峰识别主要遍历寻找某个值既大于左边又大于右边1.1、参数:①p..._怎么判断1024点ad采样数据的波峰波谷

weblogic10.3.1.0安装(windows版)_weblogic10.3.1安装-程序员宅基地

文章浏览阅读2.4k次。1.下载安装包https://www.oracle.com/technetwork/cn/middleware/weblogic/downloads/wls-main-091116-zhs.html2.如下安装包,点击安装3.点击下一步,进入以下界面,选择新建中间件主目录,安装目录为D:\softpath\weblogic10.3.1.0,选择下一步4.注册,不选中复选..._weblogic10.3.1安装

C#操作SVG矢量图-nuget库svg_.net svg-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏12次。使用C#库对矢量图进行操作实践。_.net svg

使用Navicat远程连接服务器上的mysql数据库_navicat连接服务器上的mysql-程序员宅基地

文章浏览阅读1.5k次。环境准备服务器中安装mysql数据库本地安装Navicat Premium准备好服务器的ip地址、服务器登录密码、mysql数据库的密码等服务器中mysql忘记密码解决方法修改服务器中MySQL的登录设置,通过命令vim /etc/my.cnf,在[mysqld]的段中加上一句:skip-grant-tables,例如:[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock skip-grant-tables_navicat连接服务器上的mysql

爱淘宝手机版分类导航菜单弹出效果设计-程序员宅基地

文章浏览阅读249次。来和大家一起讨论讨论爱淘宝手机版的分类导航菜单弹出效果是如何设计实现的。先来看几个截图,一个是爱淘宝官方网站的截图,另一部分是我仿照爱淘宝做的截图先声明一下我们只是借鉴爱淘宝手机版界面来进行技术的学习,如有博友看到请各位一定要理解。此博客毫无盗用淘宝核心技术。第一张图是爱淘宝官网的截图,后面两张是我们自己仿照做的截图。首先分析一下要实现的功能细节点击手机页面商品列..._淘宝分类菜单右弹出css怎么实现的