Php 使用条令抽象积垢操作
这困扰了我好一阵子,但现在我必须找到答案 我们正在使用CodeIgniter plus原则进行一个相当大的项目 我们的应用程序有一个前端和一个管理区,供公司检查/更改/删除数据 当我们设计前端时,我们只是简单地消耗了控制器中的大部分条令代码:Php 使用条令抽象积垢操作,php,doctrine,crud,Php,Doctrine,Crud,这困扰了我好一阵子,但现在我必须找到答案 我们正在使用CodeIgniter plus原则进行一个相当大的项目 我们的应用程序有一个前端和一个管理区,供公司检查/更改/删除数据 当我们设计前端时,我们只是简单地消耗了控制器中的大部分条令代码: //In semi-pseudocode function register() { $data = get_post_data(); if (count($data) && isValid($data)) { $U
//In semi-pseudocode
function register()
{
$data = get_post_data();
if (count($data) && isValid($data))
{
$U = new User();
$U->fromArray($data);
$U->save();
$C = new Customer();
$C->fromArray($data);
$C->user_id = $U->id;
$C->save();
redirect_to_next_step();
}
}
显然,当我们去做管理视图时,代码复制开始了,考虑到我们处于“完成”模式,所以现在代码膨胀的臭气熏天
我已经使用模型方法将许多功能(业务逻辑)移到了模型中,但是基本的CRUD不适合那里
我打算尝试将CRUD放入静态方法中,即Customer::save($array)[根据数组中是否存在prikey来执行插入和更新]、Customer::delete($id)、Customer::getObj($id=false)[如果为false,则获取所有数据]。但是,对于32个模型对象(并且还在增长),这将变得非常痛苦
此外,有时模型需要交互(如上所述,用户数据和客户数据之间的交互),如果不破坏封装,就无法在静态方法中进行交互
我设想在此基础上添加另一层(公开web服务),因此知道在某个时候会有3个“控制器”,我需要在某个地方封装这个CRUD(显然),但是静态方法是一条路吗,还是还有其他的路
非常感谢您的输入。我认为您需要将该逻辑放到表类中
class UserTable extends Doctrine_Table
{
public function register()
{
// There you do data model (not concrete object) related stuff
}
}
为什么不使用立面
class RegistrationManager {
public function register( $postData, $callBack ){
$data = get_post_data();
if (count($data) && isValid($data)){
$U = new User();
$U->fromArray($data);
$U->save();
$C = new Customer();
$C->fromArray($data);
$C->user_id = $U->id;
$C->save();
$callBack(); //I like this but you need PHP5.3
}
}
}
在应用程序控制器中:
$r = new RegistrationManager;
$r->register( get_post_data(), function(){ redirect_to_next_step(); } );
外观也是模型(在我看来),您可以使用它们来隐藏布线或复杂性,并减少代码重复。谢谢。你的眼睛很好。我从未注意到文档的这一部分。我会考虑的,这是有道理的。我认为我过于沉迷于模型必须是1:1对象到表的关系的想法;需要更多地跳出框框思考。谢谢