2017-07-31 43 views
1

我開始學習DDD等。現在我已經來到了倉庫,但我不能肯定我應該怎麼解決了以下問題:
這是我的例子接口:php - 存儲庫 - 我應該如何實現「自定義」標準?

interface RepositoryInterface { 

    public function all($columns = array('*')); 

    public function paginate($perPage = 15, $columns = array('*')); 

    public function create(array $data); 

    public function update(array $data, $id); 

    public function delete($id); 

    public function find($id, $columns = array('*')); 

    public function findBy($field, $value, $columns = array('*')); 
} 

現在我需要檢索模型的單個標準的數據,例如。 findActive - 我應該如何處理這種情況?將這樣的方法添加到接口中還是可以參考上面的任何方法並分別「擴展」?

+0

的經驗法則是你的倉庫類只會儲存方法會開始發現。如果它沒有意義,「發現」,在它面前不會賺錢。 : - ) –

回答

2

對於我來說,findActive()方法更具特定的表格(模型),可以在額外的接口(例如CustomerRepositoryInterface)中定義。然後你可以在一個特殊的類中實現這些不同的接口(例如CustomerRepository)。

下面是一個例子:

<?php 

interface RepositoryInterface 
{ 
    public function all($columns = array('*')); 
    public function paginate($perPage = 15, $columns = array('*')); 
    public function create(array $data); 
    public function update(array $data, $id); 
    public function delete($id); 
    public function find($id, $columns = array('*')); 
    public function findBy($field, $value, $columns = array('*')); 
} 

interface CustomerRepositoryInterface extends RepositoryInterface 
{ 
    public function findActive(); 
} 

abstract class BaseRepository implements RepositoryInterface 
{ 
    public function all($columns = array('*')) {} 
    public function paginate($perPage = 15, $columns = array('*')) {} 
    public function create(array $data) {} 
    public function update(array $data, $id) {} 
    public function delete($id) {} 
    public function find($id, $columns = array('*')) {} 
    public function findBy($field, $value, $columns = array('*')) {} 
} 

class CustomerRepository extends BaseRepository implements CustomerRepositoryInterface 
{ 
    public function findActive() { 
     echo "findActive"; 
    } 
} 

$customerRepository = new CustomerRepository(); 
$customerRepository->findActive(); 
+0

看起來不錯!順便問我一個問題 - 如何處理關係?與你的例子一樣,是否可以在特定模型的特定存儲庫之間應用鏈接? – Vertisan

+0

理論上,一個存儲庫對其他存儲庫一無所知。爲了處理多個存儲庫,我將使用一個服務類和所有相關的存儲庫作爲依賴關係。但在現實生活中,您有多個表格的非常複雜的數據庫查詢。在這種情況下,我只需在我的「find *()」方法中使用查詢生成器,並只加入所需的表。結果仍然是數據(行)的「集合」。該關係由連接表和外鍵定義。 – DanielO

相關問題