Patrząc na źródło laravel, zauważyłem wiele rzeczy tak:Jaki jest wzór cechy Laravel?
Klasa kontrolera:
class Controller extends BaseController
{
use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests;
}
Jedną z jej składowych cech:
trait AuthorizesRequests {
/**
* Authorize a given action against a set of arguments.
*
* @param mixed $ability
* @param mixed|array $arguments
*
* @return \Illuminate\Auth\Access\Response
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function authorize($ability, $arguments = []) {
list($ability, $arguments) = $this->parseAbilityAndArguments($ability, $arguments);
return app(Gate::class)->authorize($ability, $arguments);
}
// ...
}
Mam kilka pytań na ten temat:
- Czy ten wzorzec (abstrahując funkcję ponownego użycia w cechy) ma nazwę?
- Czy ten wzór był dobrze stosowany w innych projektach?
- Jeśli cecha wymaga zależności, czy istnieje najlepszy sposób ich wstrzyknięcia, zamiast korzystania z lokalizatora usług (np.
app()
, w tym przypadku)?
Jestem rozważa wykorzystanie tej metody w moim kodu, aby podzielić się ogólną funkcjonalność między kilka moich zajęć - Zastanawiam tworząc ChecksBarcodes
cechę, która będzie pracować z repozytorium informacji o stanie, i że dzielenie cecha kilku podobnych, ale niepowiązanych klas procesów zarządzania produktami, które wszystkie muszą sprawdzać kody kreskowe.
Co sądzisz o przeniesieniu zależności od klasy na cechę poprzez samo wywołanie funkcji? '$ this-> checkBarcode (zależność $, kod kreskowy $);' Wydaje się inną możliwością, ale kludgey. Czy sie zgadzasz? – Alex
Tak, wydaje mi się to mniej przydatne. Jeśli robisz to w ten sposób, każda klasa, która dziedziczy tę cechę, musi mieć zależność ręcznie wstrzykniętą, pokonując cel wydobywania powtarzających się zachowań. – Jeff
Wielkie dzięki za twoje myśli, Jeff. @ kodedge i oboje odpowiadaliście na oddzielne części pytania, więc gdybym mógł przyjąć obie odpowiedzi, zrobiłbym to! Postanowiliśmy zaakceptować drugą odpowiedź, ponieważ wiąże się ona bardziej z ogólnym tytułem pytania niż z dyskusją o zależnościach. – Alex