php中的MVC模式运用
[size=5][color=Red]php中的MVC模式运用[/color][/size]
首先我来举个例子:
一个简单的文章显示系统
简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉及文章的发布,现在开始了。
由于只涉及数据库的读取,所以我定义了两个interface
Interface DataOperation
{
public function select($info);
public function selectNum($info);
}
上面这interface定义了读取数据的接口,select方法将返回所需要的文章。selectNum方法返回文章的总数,这是分页显示时用到的。$info是一个数组,用来存放查询条件
Interface DataSource
{
public static function getInstance();
}
这里我们假定我们操作的是数据库,DataSource定义一个接口,所有实现该接口的实例类将得到一个静态对象
Interface Controller
{
public function pop();
public function push();
public function execute();
}
Interface View
{
public function display();
}
好了,我们来实现.
下面定义一个类来实现DataSource接口,这个类运用了单例模式
class DataBaseSource implements DataSource
{
public static $instance = null;
public static function getInstance()
{
if(self::$instance == null)
{
self::$instance == new PDO("mysql:host=localhost;dbname=article","root","123456");
}
return self::$instance;
}
}
定义一个抽象类来实现DataOperation,我们要共享一个数据库连接,所以我在抽象类中将这个数据库对象初始化,这样,所有的子类都能共享这个对象
abstract class DataBaseOperation implements DataOperation
{
protected $db = null;
public function __construct()
{
$this->db = DataBaseSource::getInstance();
}
public function select($info);
public function select($info);
}
下面我来写一个业务子类来实现抽象类DataBaseOperation
class Tech extends DataBaseOperation
{
public function select($info)
{
//在这里实现你的代码
}
public function selectNum($info)
{
//在这里实现你的代码
}
}
业务逻辑层我们实现了,下面是控制层
class ViewController implements Controller
{
private $mod = array();
public function push($key,$value);
{
//实现你的代码,将类注册进$this->mod;
}
public function pop($key)
{
//实现你的代码,将$this->mod[$key]值为null;
}
public function execute($key)
{
//在这里实现你的代码,生成实例.注意利用php5新的特性,异常的处理
}
}
好了,下面是表现层,这里将实现Interface View
abstract ArticleView implements View
{
protected $smarty = null;
public function __construct()
{
$this->smarty = new Smarty();
///下面你可以定义smarty的一些属性值
}
}
具体的页面,例如科技文章的显示页面
class TechArticleView extends ArticleView
{
public function display()
{
//实现你的代码,调用Tech类和更多的DataBaseOperation子类
}
}
好了,下面是总入口 index.php
try
{
$viewController = new ViewController();
$viewController->push("tech",TechArticleView);
//持续的增加
$mod = $_GET["mod"]:$_GET["mod"]:$_POST["mod"];
//最后
$viewController->execute($key);
}
catch(Exception $e)
{
//如何处理异常就是你的事了
}
php中的MVC模式运用的更多相关文章
- 生活中的MVC模式,一个吃货的理解。
以下是生活中对于MVC模式的领悟,虽然可笑,轻喷. 2015年 8月 26日 M => Model 模型 我认为叫做模具更好的理解.批量加工生产具有相同特征的东西. ...
- 稍微谈一下 javascript 开发中的 MVC 模式
随着前台开发日益受到重视,客户端代码比重日益增加的今天,如何在javascript开发里应用MVC模式,这个问题似乎会一直被提到,所以偶在这里粗略的谈一下自己的看法吧. MVC模式的基本理念,是通过把 ...
- 二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- 二十七、EFW框架BS系统开发中的MVC模式探讨
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- AngularJS中的MVC模式
MVC根据逻辑关系,把前端项目的代码分为三个层次 model:模型,就是业务数据,前端项目中就是JS变量. view:视图,就是业务数据在用户面前的展现,前端项目中就是HTML. controller ...
- MVC模式介绍
MVC是一种通过3个不同部分构造一个软件或组件的理想办法: 1.模型(Model):用于存储数据的对象. 2.视图(View):为模型提供数据显示的对象. 控制器(Controller):负责具体的业 ...
- 【转】利用MVC模式开发Java应用程序[组图]
Java是一种面向对象的语言,是实现面向对象编程的强大工具.我们在实际编程中,应该运用并发挥其最大效能.但是,要利用面向对象编程思想,自己独立开 发出好的Java应用程序,非凡是大.中型程序,并不是一 ...
- Dot Net设计模式—MVC模式
1 MVC设计模式简介 MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离.MVC作为一种开发模型,通常用于分布式应用系统的设计和分析中,以及用于确定 ...
- Swing程序最佳架构设计—以业务对象为中心的MVC模式(转)
前言: 我打算写一系列关于Swing程序开发的文章.这是由于最近我在做一个Swing产品的开发.长期做JavaEE程序,让我有些麻木了.Swing是设计模式的典范,是一件优雅的艺术品,是一件超越时代的 ...
随机推荐
- coredump查原因
1. dmesg |tail -n 1 2. objdump -DCI ./a.out 示例: $ cat a.cpp #include <stdio.h> int main(){ int ...
- Oracle 提示密码过期问题:the password will expire
SQL> conn scott/tiger ERROR: ORA: the password will expire within days Connected. SQL> conn /a ...
- gitosis使用笔记
gitosis是Git下的权限管理工具,通过一个特殊的仓库(gitosis-admin.git)对Git权限进行管理. 1:服务端安装并配置gitosis (1)通过以下方式获取到安装包 root@w ...
- 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
一.Qt环境设置 文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单-&g ...
- android 让图片充满整个屏幕
方法1: <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent&quo ...
- codility上的问题 (23)Chi 2012
这个题也比较有意思.意思是给定一个数组A,长度为M,里面都是正整数,代表每块地形的高度.现在要测试一种加农炮,给定一个炮弹的高度H, 如果存在最小的I,满足0 < I < M,满足A[I ...
- BZOJ2101: [Usaco2010 Dec]Treasure Chest 藏宝箱
2101: [Usaco2010 Dec]Treasure Chest 藏宝箱 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 327 Solved: ...
- NOI2015
D1T1 并查集. #include<cstdio> #include<cstdlib> #include<iostream> #include<fstrea ...
- Python partial函数
以前都是摘录的其他网友的博客,很少是自己写的,学习阶段,多多学习.今天开始自己写了,首先写一下刚刚遇到的partial函数. 1.partial函数主要是对参数的改变,假如一个函数有两个参数,而其中一 ...
- c++之命名空间namespace
1命名空间解决全局变量的冲突 main.h文件 #pragma once // data命名空间的名称 namespace data { ;//外部全局变量冲突 } main.cpp #include ...