Va bene per Pattern Repository contenere nomi di metodi insoliti?

0

Per esempio ho bisogno di trovare un utente il cui status è 0 e il suo nome è John . Quindi, oltre ai soliti metodi per un modello di repository (ad esempio find , create ), decido di creare un metodo in UsersRepository chiamato findJohnWithStatusZero o di essere più generico, un metodo chiamato findUserWithStatusAndName

UsersRepository.php

<?php

class UsersRepository
{
    public function create(array $data)
    {
        //
    }

    public function find($id)
    {
        //
    }

    public function findUserWithStatusAndName($status, $name)
    {
        return User::where('status', $status) -> where('name', $name) -> first();
    }

}

controller.php:

...
public function index(UsersRepository $users)
{
    $john_zero = $users -> findUserWithStatusAndName(0, 'john');
}
...

Voglio sapere, se utilizzo questi metodi personalizzati nel mio repository, violino i principi del modello di repository?

Modifica: ho fornito un nome di metodo più generico anziché findJohnWithStatusZero

    
posta AliN11 24.10.2018 - 20:29
fonte

2 risposte

4

A livello di repository, consiglierei di utilizzare un metodo più generico come Find(User user) o findUserByNameAndStatus(name, status) . Diventare troppo specifico come il tuo esempio è improbabile che sia un metodo utile per la riutilizzabilità, ed è probabilmente l'integrazione della logica di business nel tuo repository che è meglio implementato altrove. I metodi specifici non sono male in un repository, ma dovresti essere in grado di rispondere perché findJohnWithStatusZero è un metodo, ma non findSaraWithStatusTwo , alla fine avrai bisogno di findBillWithStatusOne ? In genere dovrebbe essere ovvio il motivo per cui esiste un metodo nel repository.

    
risposta data 24.10.2018 - 21:00
fonte
2

Questo è in genere risolto usando una funzione search() .

public function search($searchModel)
{
    return User::where('status', $searchModel->status) -> where('name', $searchModel->name) -> first();
}

class SearchModel { 
    public $status = 0; 
    public $name = NULL;
} 
    
risposta data 24.10.2018 - 21:00
fonte

Leggi altre domande sui tag