I fornitori di servizi Laravel contano e DI

-1

Comprendo in che modo i preamplificatori di servizio in Laravel funzionano e come usarli. Ma non sono sicuro di come mantenere il codice pulito, in particolare nel conteggio dei parametri del metodo. Ad esempio, ho questo percorso:

Route::post('/user/user-rooms', '\Modules\Administration\User\Services\UserRooms@rooms')

Dove classe assomiglia a questo:

public function rooms(Request $request, UserRulesInRoomsRepository $userRulesInRoomsRepository, RoomRepository $roomRepository)
{
    $user_rooms = $userRulesInRoomsRepository->findBy();
    $available_rooms = $this->availableRooms($userRulesInRoomsRepository, $roomRepository);
}

private function availableRooms(UserRulesInRoomsRepository $userRulesInRoomsRepository, RoomRepository $roomRepository)
{
    $userRules = $userRulesInRoomsRepository->getFilter();
    $rooms = $roomRepository->all();
}

Sto utilizzando il repository RoomRepository solo nel metodo availableRooms ma ho bisogno di questo repository già nel metodo rooms perché voglio mantenere l'iniezione della dipendenza.

Potrei usare resolver App::make(RoomRepository ::class) invece parametro in availableRooms metodo, ma penso che sia contro il pattern DI.

Un'altra opzione sarebbe salvare questo repository sulla proprietà della classe e poi richiamarlo dal metodo, ma penso che ci sia ancora un problema che ho questo parametro in rooms metodo, anche se sto usando questo repository solo in un altro metodo.

Spero di averlo scritto chiaramente. Qual è la migliore pratica in questo caso?

    
posta Jaroslav Klimčík 15.02.2018 - 08:37
fonte

1 risposta

0

Non penso che esista una best practice specifica: quello che hai sembra OK, ma condivido la tua preoccupazione con i parametri nel metodo.

Probabilmente avrei Laravel iniettare il repository nel costruttore del tuo controller, che dovrebbe salvare il riferimento come una proprietà privata dell'oggetto, per essere usato da availableRooms . Le uniche ragioni per le quali vorrei evitare di farlo sono se ci sono solo una piccola minoranza di metodi pubblici sul costruttore che richiedono un RoomRepository e RoomRepository è costoso da costruire.

    
risposta data 15.02.2018 - 09:22
fonte

Leggi altre domande sui tag