数据输入抽象层?

时间:2011-03-27 18:58:34

标签: php oop data-structures input abstraction

我想要insert/edit/delete来自database的{​​{1}}记录的自定义功能 必须为每个页面编写单个查询。

我原本想过这样做:

//page.php:

$datainput = new DataInputAbstraction();
$datainput->setTableName = 'portal';
$datainput->setAllowedFields = array('name'=>'defaultvalue','text'=>'','desc'=>'');

$datainput->run();

// DataInputAbstraction.class.php:

class DataInputAbstraction{
 //> attr      
 public function run(){
  if (isset($_POST['action']) && $_POST['action']=='insert') {
      $filteredData = array_intersect_key($this->allowedFields,$_POST);
      //> Do a mysql query to insert $filteredData to $this->table
  }
  //> Do other stuff if $_POST['action']  == 'edit' | 'del'
 }    
}

基本上方法run()基于$ _POST ['action']执行正确的操作。

使用allowedFileds属性对intersect_key执行过滤后出现的不需要的变量,然后将查询构建到

INSERT INTO $this->tableName (array_keys($field)) VALUES (array_values($field))(伪代码)

你认为这是一个很好的方法吗?有更好的方法或php提供类似的内置功能吗?

由于

2 个答案:

答案 0 :(得分:1)

在我看来,如果你不想使用已经存在的东西(RedBean是一个非常好的选择BTW),那么你可以继续这样做。

我总是喜欢尽可能多的抽象,因为它让你无法对使用什么服务做出艰难的决定。例如,如果稍后更改数据库提供程序,您将创建一个数据抽象层来处理所有数据事务,只需要重新编码就是数据抽象类。

所以,我认为这是一个好主意。我唯一的建议是确保你遵守DRY原则,并保持你的抽象层非常模块化。使用抽象层的代码不应该知道它是如何工作的,只是它提供了所需的数据。

希望有所帮助。

答案 1 :(得分:0)

它永远不会真正起作用,因为您必须为插入和更新设置不同的字段集。

然而,这个想法本身已经足够好了并且以

的形式出现
$datainput = new DataInputAbstraction();
$datainput->setTableName = 'portal';

if ($action=='insert'){
    $datainput->setAllowedFields = array('name','text','desc','timestamp');
} elseif ($action=='update'){
    $datainput->setAllowedFields = array('name','text','desc');
    $datainput->setWhereConditions = array('id' => $_POST['id']);
}
$datainput->run($action);

没关系。

但是,我自己更喜欢普通的SQL而不是某些抽象