Klasa Przypadku Użycia
Jest to świetna oraz bardzo przyjemna metoda refaktoryzacji. Z całą pewnością warto ją znać i korzystać z niej. Jest bardzo prosta a przy tym może nam bardzo dużo dać .
Na czym polega?
Jest to metoda, w której całą pewną logikę/przepis/przypadek użycia/postępowanie/pracę wyodrębniamy (przykładowo z kontrolera) do dedykowanej klasy przypadku użycia. Klasa ta będzie tylko i wyłącznie obsługiwać ten przypadek użycia, będzie do niego stworzona. Będzie niczym re-używalna klasa dotycząca pracy do wykonania. Zbiór czynności które będziemy mogli wykonać ilekroć ją wywołamy. Warto tutaj również ją odpowiednio sparametryzować.
Klasa ta jest niczym samowykonująca się komenda, którą jedynie wywołujemy (ew. z odpowiednimi parametrami).
Jak taka klasa wygląda?
Dla przykładu - klasa przypadku użycia zakupu podcasta.
<?php
namespace App\UseCases;
class PurchasePodcast
{
public static function perform()
{
return (new static)->handle();
}
private function handle()
{
$this->preparePurchase()
->sendEmail();
}
private function preparePurchase()
{
var_dump('preparing the purchase');
return $this;
}
private function sendEmail()
{
var_dump('send an email with their invoice');
return $this;
}
}
Wywołujemy tę "komendę" za pomocą wywołania: "PurchasePodcast::perform();". Statyczna metoda wywołująca jest tutaj niczym wygodny konstruktor z nazwą. Idealnie opisuje co chcemy zrobić i jest to bardzo przyjemna i wygodna forma użycia. Każda metoda w tej klasie to krok, który (zazwyczaj w odpowiedniej kolejności) musi być wykonany. Przy czym każdy krok powinien zasługiwać na własną metodę !
Warto tutaj również wyodrębnić superklasę, przykład:
<?php
namespace App\UseCases;
abstract class UseCases
{
public static function perform()
{
return (new static)->handle();
}
abstract public function handle();
}
Dzięki temu możemy oczyścić nasze klasy przypadków użycia ze zbędnego kodu .
Uwaga
Nie używaj tej metody wszędzie i zawsze. Nie zacznij ze wszystkiego robić nagle klasy przypadków użycia! Szczególnie nie dla czegoś prostego! Używaj tej metody tylko dla ważnej logiki, nieco skomplikowanej, zawierającej wiele kroków i działań, dla ważnych konceptów. Dla prawdziwych przypadków użycia. Stosuj tę metodę tylko wtedy, kiedy to co chcesz wyodrębnić naprawdę zasługuje na miano przypadku użycia . Nie przesadź z tą metodą. Może się to wydawać spoko - ale nie. Nie stworzysz nic świetnego, fajnego, przyjemnego jeśli będzie nadużywać tej techniki.
Zalety
Stosowanie tej techniki niesie za sobą szereg zalet. Sam fakt pięknej, ładnej, schludnej, szybkiej, skutecznej refaktoryzacji, oczyszczenie naszego kodu, stworzenie nowego miejsca, w którym będziemy trzymać nasze przypadki użycia. I będziemy je przechowywać w sposób schludny i uporządkowany. Nadamy całej operacji i krokom nazwy. Elegancko zamkniemy je w dedykowanych klasach, gdzie każdy krok to własna metoda... Super .
Uczulam jedynie raz jeszcze - nie przesadź! Bądź ostrożny, nie nadużywaj tej metody . Używaj mądrze, rozważnie, z głową .
Przypadki Użycia w Laravelu
Warto również wspomnieć, że Laravel posiada coś niemalże identycznego, tylko dużo bardziej rozbudowanego. Albowiem przypadki użycia w Laravelu (zwane Jobs) mogą być kolejkowane. A to tylko jedna z zalet stosowania ich w Laravelu. Ale to już na osobny artykuł .
Podsumowanie
Świetna technika. Nie najlepsza, nie idealna. Czasem dobra, czasem nie. Łatwo przesadzić. Ale z całą pewnością warto stosować !
Kończąc
To już wszystko w tym temacie. Gorąco zachęcam do komentowania, udostępniania i stosowania w projektach ! A tym czasem życzę ci dobrego dnia, bywaj!
Krystian Bogucki