對這文章發表回應
發表限制: 非會員 可以發表
發表者: 冷日 發表時間: 2019/7/22 13:25:46
Design Pattern — Data Access Object
DAO(Data Access Object) 應該是最基礎且最廣泛運用的一個設計模式了。其適用的情境為:
- 程式需要利用別的媒介來儲存或取得資料
- 程式需要能移植到其它儲存媒介
- 各個儲存媒介之間使用的存取方式不同
- 希望程式不會受到儲存媒介的變換而修改
DAO 通常看到的範例都會與另外一個物件搭配使用,稱之為 Data Transfer Object 。但是這兩者之間並不一定要綁在一起用。DAO 的重點在提供一個統一的資料存取方式,而回傳的資料可以用 DTO 表示,但也可以用其它方式(例如陣列)來實作。這邊以一個會員系統為例,如何以 DAO 模式來提供會員相關資料的存取。
首先需要設計一個 Interface 來提供資料的存取,這邊為了簡化程式數量,還是按照常見作法搭配 DTO 來使用:
PHP
interface IUserDAO
{
public function create();
public function findById($id);
public function updateUser(User $user);
public function deleteUser(User $user);
}
1 2 3 4 5 6 7 | interface IUserDAO { public function create ( ) ; public function findById ( $id ) ; public function updateUser ( User $user ) ; public function deleteUser ( User $user ) ; } |
有了這個 Interface 之後,我們就可以實作兩種 DAO 分別對應到記憶體與資料庫這兩種不同的儲存媒介:
PHP
class MemoryUserDAO implements IUserDAO
{
public function create()
{
// TODO: Implement create() method.
}
public function findById($id)
{
// TODO: Implement findById() method.
}
public function updateUser(User $user)
{
// TODO: Implement save() method.
}
public function deleteUser(User $user)
{
// TODO: Implement delete() method.
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class MemoryUserDAO implements IUserDAO { public function create ( ) { // TODO: Implement create() method. } public function findById ( $id ) { // TODO: Implement findById() method. } public function updateUser ( User $user ) { // TODO: Implement save() method. } public function deleteUser ( User $user ) { // TODO: Implement delete() method. } } |
原文出處: Design Pattern — Data Access Object | C瓜農場