关于结合smarty进行MVC模式开发的讨论

leaxin 2006-04-15 10:46:03
最近公司要开发一套全新的系统,我打算用MVC模式开发,到网上搜罗了很多资料,但都不尽人意.
smarty很好的实现了MVC中的View,但是 Model 和 controller 好像还没有很好的区别.
phppatterns.com上面给出的MVC实现方法给了我很大的启发,但他并没有结合smarty
这是我个人结合smarty实现的,自认为比较清晰的MVC模式.本人不是想秀自己的水平,只是想和大家探讨一下.希望大家指出我的不足,或给点建议应如何改进

class ProductModel{
var $db;
function ProductModel(&$db)
{
$this->db=$db;
}
function listProducts(){
return $this->db->query($sql);
}
function getProductInfo()
{
return $this-db->query($sql);
}
}
class ProductView{
var $model;
var $template;
var $smarty;
function productView(&$model)
{
global $smarty;
$this->smarty=&$smarty;
$this->model = model;
}
function listProducts()
{
$smarty->assign('productlist',$this->model->listProducts());
$this->setTemplate('listProduct.ptl');
}
function getProductInfo()
{
$smarty->assign('productinfo',$this->model->getProductInfo());
$this->setTemplate('getProductInfo.ptl');
}
funciton setTemplate($template)
{
$this->template=$template;
}
function display()
{
$this->smarty->display($this->template);
}

}

class ProductController extends ProductView{
function ProductControler($model,$_GET)
{
ProductView::ProductView($model);
switch($_GET['action']){
case 'listProduct'
$this->listProduct();
break;
case 'getProductInfo'
$this->getProductInfo();
}
}
}

使用例子:
require_once('DB.php');
require_once('Smarty.class.php');
require_once('ProductModel.php');
require_once('ProductView.php');
require_once('ProudctController.php');

$model = & new ProductModel($db);
$controller = & new ProductController($model,$_GET);
$controller->display();
...全文
1092 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
leaxin 2006-04-21
  • 打赏
  • 举报
回复
up!
GaoXX 2006-04-16
  • 打赏
  • 举报
回复
顶一下
leaxin 2006-04-16
  • 打赏
  • 举报
回复
呵呵,我的就是从phppatterns.com上面拿过来的,只不过在View中加了smarty 因为我实在不想看到在php里面还有html的东东
JollySandy 2006-04-16
  • 打赏
  • 举报
回复
但本热更推荐phppatterns.com的MVC2模式,比MVC1的更完善,而且扩展性更好。
leaxin 2006-04-16
  • 打赏
  • 举报
回复
因为基实Controller要实现的基本上是根据不同的用户提交的参数掉用View中的接口.因为一开始实现View的时候没有考虑到与用户的交互或者控制等方面的事情,所以Controller 控过继承View添加一些控制
ffyd2000 2006-04-16
  • 打赏
  • 举报
回复
个人感觉cakephp(www.cakephp.org)的实现比较舒服

class ProductController extends ProductView
controller 为什么会从view那里继续呢?
leaxin 2006-04-16
  • 打赏
  • 举报
回复
在此基础上我试着对WEB的开发应用作一些基本的抽象,WEB开发应用无非就是要实现如下的对象

Model View Controller Filter Decorator

Model 是应用的逻辑实现,View是界面的实现,Controller控制用户的交互 Filter互责对用户提交数据进行过滤 Decorator对反回用户的数据进行修饰
具体的交互过程如下 用户向服务器提交请求 先被Filter处理
可以根据不同的需要制造不同的Filter如,去掉空格 urlencode等都可以实现成一个Filter类,也可以实现一个FilterChain(过滤链),将不同功能的Filter组合工作,
,然后Controller根据用户的请求调用View中定义好的可用的接口,View 中定义的接口的具体实现由相应的Model执行,Model返回执行的结果给View ,在View中根据不同需要设定不同的template,也可以使用不同的Decorator进行修饰,如UBB代码实现类等可以作为一个Decorator ,同样也可以做一个DecoratorChain 将不同功能的Decorator组合一起工作。然后再使用display方法将结果呈现给用户.

总的来说,根据的模块分别实现不同的 Model View Controller Filter Decorator就可以了

不知大家对我的想法有什么看法,有没有什么漏掉的地方?
sunofnet 2006-04-16
  • 打赏
  • 举报
回复
找成熟的开源MVC,比如phpmvc,seagull等!zend也要出一个官方的了,我是个PHP开发人员,我们可以一起研究哈!qq:151738791
xiemengjun 2006-04-16
  • 打赏
  • 举报
回复
对了!如果有空可以和我交流一下!msn:xiemengjun007@hotmail.com
xiemengjun 2006-04-16
  • 打赏
  • 举报
回复
不错,我也想学习一下!我也在研究这个!最好那个数据库访问可以加入adodb,然后以后扩展时可以加入根据模块来扩展!
iasky 2006-04-15
  • 打赏
  • 举报
回复
mark
leaxin 2006-04-15
  • 打赏
  • 举报
回复
大家给点意见吧
php的生命力还是很强的,现在网上开源的CMS系统基本是PHP的天下
puwaifu 2006-04-15
  • 打赏
  • 举报
回复
mark

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧