php中的MVC模式运用技巧_php技巧

php中的MVC模式运用
首先我来举个例子:
一个简单的文章显示系统
简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉及文章的发布,现在开始了。
由于只涉及数据库的读取,所以我定义了两个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);
}

下面我来写一个业务子类来实现抽象类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)
{
       //如何处理异常就是你的事了
}

时间: 2024-07-31 16:32:02

php中的MVC模式运用技巧_php技巧的相关文章

理解javascript中的MVC模式_javascript技巧

MVC模式是软件工程中一种软件架构模式,一般把软件模式分为三部分,模型(Model)+视图(View)+控制器(Controller); 模型:模型用于封装与应用程序的业务逻辑相关的数据以及对数据处理的方法.模型有对数据直接访问的权利.模型不依赖 "视图" 和 "控制器", 也就是说 模型它不关心页面如何显示及如何被操作. 视图:视图层最主要的是监听模型层上的数据改变,并且实时的更新html页面.当然也包括一些事件的注册或者ajax请求操作(发布事件),都是放在视图

在ASP.NET中实现MVC模式(五)

asp.net 在ASP.NET中实现Model-View-Controller模式(五) 测试 将模型部分从ASP.NET环境中分离出来能够使模型部分更容易的被测试.在ASP.NET环境中进行测试的话,你必须同时测试很多方面,如HTML代码是否正确,而读取HTML代码的工作是非常烦闷的.将模型部分分离出来,使你能够对模型部分做单独的单元测试.下面是NUnit (http://nunit.org)对模型部分进行单元测试的例子. using System; using NUnit.Framewor

关于php mvc开发模式的感想_php技巧

使用mvc开发模式是为了什么?? MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型.视图.控制器.它们各自处理自己的任务. 我们有必要严格区分mvc的三层模式模式吗? m与c的跨界使用更有利于快速开发. 在我使用的框架中 m与c可以跨界使用,并不严格区分.有时候很想直接在c里处理m的事,因为业务的数据处理并不多见,也许只有一次. 这样在m里面写个函数, 再用c调用,变得复杂,这与php快速开发理念相悖. 我们需要的什么? 1.视图分离

在ASP.NET中实现MVC模式(二)

asp.net 在ASP.NET中实现Model-View-Controller模式(二) MVC模式形容这种实现方式是一种被动的实现机制,ASP.NET充当了程序执行中的控制器的角色,但程序员必须将具体的事件处理方法添加到事件的响应函数中.如在这个例子中,控制器在页面加载之前调用Page_Load函数并执行其中的代码,当用户点击Submit按钮时由系统调用SubmitBtn_Click函数并执行. 这种将代码都包含在一个文件中的实现方式非常的直接,而且当应用程序很小并不经常修改的时候也可以说是

在ASP.NET中实现MVC模式(一)

asp.net 在ASP.NET中实现Model-View-Controller模式(一) 背景: 当利用ASP.NET创建Web应用程序时,基于程序的复杂性,必须把程序分割成不同的部分以减少代码的重复及减少日后变革时所引起的改动. 实现策略: 为了解释如何在ASP.NET中实现(MVC)模型-视图-控制器模式,以及说明将软件分离成模型.视图.及控制器角色的好处,在此以一个示例程序为例进行说明.这个示例程序是一个带有下拉框的单页程序,它的功能是显示数据库中的数据.如下图. 当用户在下拉框中选择了

在PHP中使用MVC模式进行开发

  1 ,软件结构发展过程中的3个阶段: Model1模式 , Model2模式 , MVC模式 1>Model1最重要的特点就是没有分层的概念 , 也就是说把界面 和业务逻辑的处理放在一个文件中来完成. 缺点: 1表现层和业务逻辑层混合在一起了,非常乱 2 在实际开发过程中 , 不利于多人协同开发. 3 不利于后期的维护 优点: 1 简单, 开发速度比较快 2 比较适合开发小型项目 2>Model2 分层模式 : 把界面和业务逻辑分开编写 , 好处就是结构清晰, 利于 分工开发 . 有些书上

谈谈关于JavaScript 中的 MVC 模式_基础知识

原文:Model-View-Controller (MVC) with JavaScript作者:Alex@Net译文:JavaScript 的 MVC 模式译者:justjavac 本文介绍了模型-视图-控制器模式在 JavaScript 中的实现. 我喜欢 JavaScript,因为它是在世界上最灵活的语言之一. 在 JavaScript 中,程序员可以根据自己的口味选择编程风格:面向过程或面向对象. 如果你是一个重口味,JavaScript 一样可以应付自如: 面向过程,面向对象,面向方面

PHP的Yii框架中Model模型的学习教程_php技巧

模型是 MVC 模式中的一部分, 是代表业务数据.规则和逻辑的对象. 模型是 CModel 或其子类的实例.模型用于保持数据以及与其相关的业务逻辑. 模型是单独的数据对象.它可以是数据表中的一行,或者一个用户输入的表单. 数据对象的每个字段对应模型中的一个属性.每个属性有一个标签(label), 并且可以通过一系列规则进行验证. Yii 实现了两种类型的模型:表单模型和 Active Record.二者均继承于相同的基类 CModel. 表单模型是 CFormModel 的实例.表单模型用于保持

在ASP.NET中实现MVC模式(四)

asp.net 在ASP.NET中实现Model-View-Controller模式(四) 模型-视图-控制器分离的重构 为了解决上面所遗留的问题,你必须将模型与控制器角色分离. 视图的实现代码与前部分相同. 模型 下面的代码例子使模型角色仅仅依赖于数据库,而不包含任何与视图相依赖的代码. using System; using System.Collections; using System.Data; using System.Data.SqlClient; public class Dat