Php 使用条令抽象积垢操作

Php 使用条令抽象积垢操作,php,doctrine,crud,Php,Doctrine,Crud,这困扰了我好一阵子,但现在我必须找到答案 我们正在使用CodeIgniter plus原则进行一个相当大的项目 我们的应用程序有一个前端和一个管理区,供公司检查/更改/删除数据 当我们设计前端时,我们只是简单地消耗了控制器中的大部分条令代码: //In semi-pseudocode function register() { $data = get_post_data(); if (count($data) && isValid($data)) { $U

这困扰了我好一阵子,但现在我必须找到答案

我们正在使用CodeIgniter plus原则进行一个相当大的项目

我们的应用程序有一个前端和一个管理区,供公司检查/更改/删除数据

当我们设计前端时,我们只是简单地消耗了控制器中的大部分条令代码:

//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对象到表的关系的想法;需要更多地跳出框框思考。谢谢