2016-05-11 40 views
3

我在Laravel有一個典型的存儲庫模式結構。以水果模型爲例我有:在Laravel 5.x中使用Repository Pattern時,我們應該只使用控制器中的敘述方法嗎?

類別EloquentFruitRepository延伸摘要EloquentRepository實施FruitRepositoryInterface

FruitRepositoryInterface延伸RepositoryInterface

最後RepositoryInterface定義這些通用/共享方法,如allfindwithcreate

我看了所有的一切關於Laravel 5.庫模式我審查了所有GitHub上的項目和審查關於所有學家...我有顧慮。

我喜歡只用敘事方法,在我的水果模型的情況下,應該坐在EloquentFruitRepository的方法。的

所以在我的控制,而不是建造東西,如:

$fruits = $this->fruitRepository 
    ->where('color', '=', 'yellow') 
    ->where('is_available', '=', true) 
    ->with(['comments']) 
    ->orderBy([ 
     'sweetness' => 'asc' 
    ]) 
    ->all(); 

是它只是爲了更好地做

$fruits = $this->fruitRepository 
    ->getAvailableYellowFruitsWithPeopleCommentsOrderedBySweetness(); 

,然後定義在EloquentFruitRepository這個方法,如:

public function getAvailableYellowFruitsWithPeopleCommentsOrderedBySweetness(): Collection 
{ 
    $model = $this->makeModel(); 

    $model 
     ->where('color', '=', 'yellow') 
     ->where('is_available', '=', true) 
     ->with(['comments']) 
     ->orderBy([ 
      'sweetness' => 'asc' 
     ]); 

    return $model->get() ?? new Collection(); 
} 

所以一般來說,所有這些通用方法應該只在特定的el內使用頻繁的倉庫或者是否可以在控制器中使用它們?

目前雙方的工作方式。我在問最好的(最好的)練習,而不是任何人的偏好。

我們應該只使用控制器的敘事方法?

感謝您的任何反饋。

回答

2

你正在尋找一個「最好」的做法,但正如你可能知道,當涉及到設計模式沒有適合所有

話雖這麼說的情況一般的「最佳實踐」 ,一般規則是:當您需要在您的應用程序的多個點中進行查詢時,請將其放入存儲庫中。如果你只需要一次它取決於你

我也把它放在一個存儲庫中,但我會用一個更短和更易讀的名字命名該方法,即:getAvailableYellowFruits。對我來說,「與」和「ORDER BY」的部分是可以忽略不計,如果你願意,你可以隨時把在方法

+0

作爲的意見,即信息之外,如果你從你的資料庫來表示你的應用程序的不同部分邏輯,而不僅僅是模型訪問包裝器(一個存儲庫的硬定義),那麼你可以有一個方法,如上面提到的特定於應用程序的那部分。例如,管理員信息中心將使用帳戶模型,該模型將具有AccountRepository。但沒有理由沒有一個AdminRepository以特定的格式返回該應用程序那部分的帳戶(帳戶列表w /排序)。儘管如此,可能會有更好的術語。 – jardis

+0

感謝您的反饋人。指出。 – slick

相關問題