php - 框架 代码复用问题
本文介绍了php - 框架 代码复用问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
在用tp3.3做项目开发时,很多时候增删改查代码基本一致,尤其是控制器部分.但是每个控制器中都相同的代码都需要重复写一遍.
学习过设计模式,这种情况用怎样的模式可以减少代码的重复量.最好用设计模式
举个例子,做rbac系统:
这个是我的管理员控制器增删改查的基本代码,除了构造函数创建的模型类不同,基本增删改查结构都差不多,怎么样能减少重复代码了.希望高手能指点一下,谢谢.
protected $_model;
public function __construct(){
parent::__construct();
$this->_model=new MannagerModel();
}
/**
* 管理员添加
*/
public function addC(){
if(IS_POST){
$data=I('post.');
$res=$this->_model->Store($data);
$this->redirectUrl($res,'listC');
}
$this->display();
}
/**
* 管理员列表显示
* @return [type] [description]
*/
public function listC(){
$data=$this->_model->lists();
$this->assign('lists',$data);
$this->display();
}
/**
* 管理员删除
* @return [type] [description]
*/
public function delC(){
$id=intval(I('get.id'));
$res=$this->_model->del($id);
//跳转判断函数
$this->redirectUrl($res);
}
/**
* 管理员更新
* @return [type] [description]
*/
public function editC(){
$id=intval(I('get.id'));
//where的数组形式
$where['id']=$id;
// 显示旧数据
$old=$this->_model->lists($where);
$this->assign('old',$old);
//存储新的数据
if(IS_POST){
$data=I('post.');
$res=$this->_model->edit($id,$data);
$this->redirectUrl($res,'listC');
}
$this->display();
}
解决方案
跟设计模式没关系,跟你的基础有关系,重复代码一定要考虑将代码抽象出来,然后子类集成抽象类,建议你多看看框架源码
举个例子:
abstract class Controller{
public function add(){
}
public function update(){
}
public function delete(){
}
public function select(){
}
}
class HomeController extends Controller{
public function getUserInfo(){
$this->select();
}
public function deleteUserInfo(){
$this->delete();
}
}
class AdminController extends Controller{
public function getUserInfo(){
$this->select();
}
public function updateUserInfo(){
$this->update();
}
}
如果粒度更粗,这段代码如果是两个或多个不相干的类需要使用,可以考虑使用php5的新特性Trait,将代码分片抽出来,通过use的方式引入使用,不过你这个需求,只是需要抽象的问题,记得公共的代码,能抽象就抽象出来,Don't Repeat Yourself
这篇关于php - 框架 代码复用问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文