Devloger

Refaktoryzacja Kodu Klasą Przypadku Użycia

Klasa Przypadku Użycia

Logo do posta refaktoryzacji kodu klasą 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ć Emotikon uśmiechniętej buźki.

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ę Emotikon uśmiechniętej buźki!

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 Emotikon uśmiechniętej buźki.

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 Emotikon uśmiechniętej buźki. 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 Emotikon uśmiechniętej buźki.

Uczulam jedynie raz jeszcze - nie przesadź! Bądź ostrożny, nie nadużywaj tej metody Emotikon uśmiechniętej buźki. Używaj mądrze, rozważnie, z głową Emotikon uśmiechniętej buźki.

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ł Emotikon uśmiechniętej buźki.

Podsumowanie

Świetna technika. Nie najlepsza, nie idealna. Czasem dobra, czasem nie. Łatwo przesadzić. Ale z całą pewnością warto stosować Emotikon uśmiechniętej buźki!

Kończąc

To już wszystko w tym temacie. Gorąco zachęcam do komentowania, udostępniania i stosowania w projektach Emotikon uśmiechniętej buźki! A tym czasem życzę ci dobrego dnia, bywaj!

Krystian Bogucki

Podobał Ci się ten artykuł?

Jeśli tak, to zarejestruj się aby otrzymywać powiadomienia o nowych artykułach. Nie ujawnię nikomu Twojego adresu!

2 komentarzy... przeczytaj komentarze albo dodaj nowy komentarz


Patryk

2019-12-07

Świetny wpis! Gdzie najlepiej trzymać takie klasy w strukturze katalogów projektu? Zawsze mam problem z znalezieniem gdzie trzymać swoją logikę biznesową.

Devloger

2019-12-09

Dzięki Patryk! Wiesz, myślę, że dla tego typu klas wypada zrobić osobny katalog. Co do dokładnej lokalizacji... zależy jak pracujesz czy jakiego frameworka używasz. Ale podstawowo wydzieliłbym tego typu klasy do dedykowanego folderu. A folder ten być może w jeszcze wydzielonym folderze, do podobnych tego typu rozwiązań :). Pozdrawiam.