日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php数据访问层设计,php - Zend框架数据访问层(DAL) - 堆栈内存溢出

發布時間:2023/12/10 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php数据访问层设计,php - Zend框架数据访问层(DAL) - 堆栈内存溢出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

好吧,在處理Data Access Layer ,您必須考慮的第一件事是該層還具有子層 ,在現代框架中很難找到名為“ dal”的文件夾(我以Zend為基礎框架和Symfony)。

其次,關于ActiveRecord ,您必須知道默認情況下Zend Frameworks 不會實現它 。 大多數教程都采用最簡單的方法來教授新概念。 通過簡單的示例, 業務邏輯的數量很少,因此,它們沒有添加另一層復雜性(在數據庫和模型對象之間進行映射),而是通過兩種基本模式構成了domain layer (模型): Table Data Gateway和Row Data Gateway 。 對于初學者來說,這是足夠的信息。

在對其進行分析之后,您將看到ActiveRecord和行數據網關模式之間的一些相似之處。 主要區別在于ActiveRecord對象(可持久實體) 承載業務邏輯,而行數據網關僅表示數據庫中的一行 。 如果在代表數據庫行的對象上添加業務邏輯,則它將成為ActiveRecord對象。

此外,在Zend Framework 快速入門之后 , 在域模型部分 ,您將意識到還有另一個組件,它使用了Data Mapper Pattern 。

因此,如果您的DAL的主要目的是在業務對象(模型)和存儲之間映射數據,則此任務的職責將委托給數據映射器 ,如下所示:

class Application_Model_GuestbookMapper

{

public function save(Application_Model_Guestbook $guestbook);

public function find($id);

public function fetchAll();

}

這些方法將與Database Abstraction Layer進行交互,并使用數據填充域對象。 遵循以下原則:

public function find($id, Application_Model_Guestbook $guestbook)

{

$result = $this->getDbTable()->find($id);

if (0 == count($result)) {

return;

}

$row = $result->current();

$guestbook->setId($row->id)

->setEmail($row->email)

->setComment($row->comment)

->setCreated($row->created);

}

如您所見, Data Mappers與Zend_Db_Table實例進行交互,該實例使用Table Data Gateway Pattern進行交互。 另一方面, $this->getDbTable->find()返回Zend_Db_Table_Row的實例,該實例實現行數據網關模式 (這是代表數據庫行的對象)。

提示: domain object本身的guestbook實體, 并沒有通過在DataMapper的的find()方法創建的 ,相反,這個想法是, 對象的創建工廠的任務 ,你必須注入的依賴,以實現所謂的依賴倒置原則(DIP) (SOLID原則的一部分)。 但這是另一個問題,超出了問題的范圍。

映射的東西從這里開始:

$guestbook->setId($row->id)

->setEmail($row->email)

->setComment($row->comment)

->setCreated($row->created);

到目前為止,我想我已經回答了您的主要問題,您的結構如下:

application/models/DbTable/Guestbook.php

application/models/Guestbook.php

application/models/GuestbookMapper.php

因此,如ZF快速入門中所示:

class GuestbookController extends Zend_Controller_Action

{

public function indexAction()

{

$guestbook = new Application_Model_GuestbookMapper();

$this->view->entries = $guestbook->fetchAll();

}

}

也許您想為數據映射器創建一個單獨的文件夾。 只是改變:

application/models/GuestbookMapper.php

application/models/DataMapper/GuestbookMapper.php

班級名稱將是

class Application_Model_DataMapper_GuestbookMapper

我已經看到您想將domain model objects分成模塊。 同樣,您可能需要遵循ZF的modules目錄和命名空間指南 。

最后提示:我花了很多時間編寫自己的數據映射器,以最終意識到,當應用程序與許多相關實體一起增長時,維護對象映射是噩夢 。 (例如,包含對用戶對象的引用的Account對象,包含角色的用戶等等)在這一點上編寫映射內容并不容易。 因此,如果您確實想要一個真正的對象關系映射器,我強烈建議您首先研究遺留框架如何執行此類任務并可能使用它。 因此,使用Doctrine 2可以節省一些時間,這是迄今為止使用DataMapper模式的最佳(IMO) 之一 。

而已。 您仍然可以使用/dal目錄存儲DataMappers,只需注冊名稱空間 ,以便自動加載器可以找到它。

總結

以上是生活随笔為你收集整理的php数据访问层设计,php - Zend框架数据访问层(DAL) - 堆栈内存溢出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。