2016-06-23 69 views
2

我有一個課程來構建Laravel課程註冊報告。以下是我的課程:Laravel中的聚合注入

class Report { 

    protected $user; 
    protected $course; 
    protected $registration; 

    public function __construct(User $user, Course $course, Registration $registration) { 
     $this->user = $user; 
     $this->course = $course; 
     $this->registration = $registration; 
    } 

    public function build() { 
     // build report 
    } 

} 

Laravel將自動將用戶,課程和註冊模型實例注入報告。 如果我需要更多其他應該用來構建報表的模型類,則需要向Report的構造函數添加更多參數。

class Report { 

    protected $user; 
    protected $course; 
    protected $registration; 

    public function __construct(User $user, Course $course, Registration $registration, Another1 $another1, Another2 $another2, ...) { 
     $this->user = $user; 
     $this->course = $course; 
     $this->registration = $registration; 
    } 

    public function build() { 
     // build report 
    } 

} 

這是正確的方法嗎? 有沒有其他方法來聚合那些將在Report類中使用的類?我應該使用Facade Pattern來重構它嗎?

任何幫助表示讚賞。

回答

1

如果你真的需要這麼多的模型注入,你很可能需要重構你的代碼並重新考慮Report類是如何構建的。

取代模型,瞭解有關存儲庫的更多信息。

我建議您也瞭解更多關於單一責任原則。 wiki

1

由於Laravel將注入這些類的新實例,你可以考慮,而不是這樣做:

public function __construct() 
{ 
    $this->createInstances(); 
} 

protected function createInstances() 
{ 
    $this->user = new User; 
    $this->course = new Course; 
    $this->registration = new Registration; 
    ... 
} 

編輯

或者這對解決這些類的任何依賴關係:

protected function createInstances() 
{ 
    $this->user = $this->app->make('User'); 
    $this->course = $this->app->make('Course'); 
    $this->registration = $this->app->make('Registration'); 
    ... 
}