2010-10-01 14 views
1

我写房地产网站 具有选择和订购不动产的基本功能。哪些数据库模式(ORM,DAO,活动记录等)用于小型/中型项目?

它体积小/简单的项目,但我想它写在方式, 所以在未来我,或其他开发人员,可以把它变成中小型企业应用,而无需从头开始重写它 。

那么你可以建议我用什么样的模式来处理数据库呢?

现在我有这样的:

class db_DBConnection 
{ 
    // basic singleton pattern here... 
} 

// primary class to be extende by other table DAOs 
abstract class db_Table 
{ 
protected $table; 
protected $order_by; 

/** 
* Executes specified query with prepared statements 
* returns statement object, which can fetch data. 
* 
* @param $sql - SQL query to execute 
* @param $params - bind values to markers through associative arrays 
*/ 
protected function executeQuery($sql, $params = null) 
{ 
    $dbh = db_DBConnection::getConnection(); 
    $stmt = $dbh->prepare($sql); 
    // binds values to markers and executes query 
    $stmt->execute($params); 
    return $stmt; 
} 

/** 
* @param id - id of row to retrieve from database 
* 
* It sends SQL query and id to executeQuery 
* function returns associative array, representing 
* database row. 
*/ 
public function find($id) 
{ 
    $sql = 'SELECT * FROM ' . $this->table . ' WHERE id=:id LIMIT 1'; 
      // bind id 
    $params = array(':id' => $id); 
    // execute and return associative array 
    return $this->executeQuery($sql, $params)->fetch(PDO::FETCH_ASSOC); 
} 

public function findAll($quantity, $where) 
{ 
// Returns array of 
// associative arrays of table rows :) 
// TODO: write this function 
} 

abstract protected function insert(); 

abstract protected function update(); 

abstract protected function delete(); 

    // ... 
+0

*(参考)* [企业应用程序体系结构](http://martinfowler.com/eaaCatalog/index.html) – Gordon 2010-10-01 13:38:51

+0

我发现很难向您建议任何事情,而不知道项目的真实世界要求手。无论你需要一个ORM还是一个框架,甚至PHP都不能根据你提供的细节决定。解释各种模式的优缺点超出了范围。 – Gordon 2010-10-01 14:19:34

回答

5

最好的方法是使用一个ORM,像Doctrine。对于小型项目来说,这看起来可能有点过分,但从长远来看,这是值得的。

最好使用标准的做事方式,而不是重新发明自己的做法。

这是list of ORMS from Wikipedia

此外,你需要评估你的项目,创建项目自由式可能不是一个很好的主意。其他开发人员将不得不学习您的代码并理解它的工作原理等等。最好使用熟知的框架,如Zend Framework,SymfonyCakePHP。您还可以查看可扩展的CMS系统,如JoomlaDrupal

+1

+1虽然我会建议使用[Propel](http://www.propelorm.org)作为ORM:p。 – wimvds 2010-10-01 14:52:53