PHP架構裡面如何理解DAO (Data Access Object)層??
回複內容:
PHP架構裡面如何理解DAO (Data Access Object)層??
這個是非DAO的代碼
$db = mysql_connect(...);$query = mysql_query('SELECT * FROM user WHERE uid=123', $db);while($line = mysql_fetch_array($query)) { //xxx}
這個是DAO的代碼(對,PDO其實就是典型的DAO)
$db = new PDO('mysql...');$query = $db->prepare('SELECT * FROM user WHERE uid = :uid');$query->execute(['uid' => 123]);$result = $query->fetchAll();
這是另一種DAO的代碼,嗯,比PDO好看一點而已
$db = new NotORM(new PDO('mysql...'));$result = $db->user->select('*')->where('uid = ?', 123);foreach($result as $row) { //...}
最後ORM的代碼可能是這樣的
class User extends ORMClassXXX { public $id; public $name; public $password;}$result = User::getById(123);
DAO和ORM可以說幾乎沒有任何關係,唯一的關係就是大多數ORM的實現都用了DAO,僅此而已。大概就像汽車和93號汽油的關係,很多汽車都用93號汽油,但也僅此而已,汽車和汽油的形態、功能、用途全都不一樣
放到PHP的環境中,由於PHP基本已經廢棄了非DAO的mysql_*的訪問方式,所以PDO以及DAO基本成為了業界標準,應該沒有知名的PHP的ORM下面墊的不是DAO,所以可能造成了題主的困惑。但其實ORM是可以完全不用DAO實現的。打比方說寫個後面是Redis的ORM之類
- 對資料庫連結的封裝(Singleton? Pool)?
Singleton: 可以防止一個請求,建立多個資料庫連結,節省資源;
Pool:節省建立連結的時間;
- 對資料存取的物件導向的封裝(ORM)?
方便資料操作,對資料記錄可以已對象方式進行管理