2010-10-01 27 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