PHP架構裡面如何理解DAO (Data Access Object)層??

來源:互聯網
上載者:User
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之類

  1. 對資料庫連結的封裝(Singleton? Pool)?
    Singleton: 可以防止一個請求,建立多個資料庫連結,節省資源;
    Pool:節省建立連結的時間;
  2. 對資料存取的物件導向的封裝(ORM)?
    方便資料操作,對資料記錄可以已對象方式進行管理
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.