Action Pattern v Laravelu

Action Pattern v Laravelu

Krátký popis: Action Pattern je moderní způsob, jak udržet váš kód v Laravelu organizovaný, znovupoužitelný a snadno testovatelný. Naučte se, jak vytáhnout byznys logiku do samostatných tříd.

1. Jak to vypadá běžně (The "Fat Controller" Way)

Většina začátečníků a menších projektů píše veškerou logiku (validaci, nahrávání souborů, odesílání e-mailů, zápis do DB) přímo do metody controlleru. To vede k nepřehledným souborům, které je těžké testovat a nelze je znovu použít jinde.

Příklad v Controlleru:

public function store(Request $request)
{
    // Veškerá logika je v jedné metode
    $validated = $request->validate([
        'name' => 'required',
        'email' => 'required|email|unique:users',
    ]);

    $user = User::create($validated);

    // Další logika, kterou možná budeme potřebovat i jinde
    Mail::to($user)->send(new WelcomeMessage($user));
    Log::info('Nový uživatel vytvořen: ' . $user->id);

    return back()->with('success', 'Uživatel byl vytvořen.');
}

1. Jak to vypadá s Action Patternem

Action Pattern vyčlení jednu konkrétní činnost (např. "Vytvořit uživatele") do samostatné třídy s jedinou metodou. Controller pak jen tuto akci zavolá.

Krok 1: Vytvoření Action třídy

namespace App\Actions;

use App\Models\User;
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeMessage;
use Illuminate\Support\Facades\Log;

class CreateUserAction {
    public function execute(array $data): User {
        $user = User::create($data);

        Mail::to($user)->send(new WelcomeMessage($user));
        Log::info('Nový uživatel vytvořen přes Action: ' . $user->id);

        return $user;
    }
}

Krok 2: Čistý Controller

Díky Dependency Injection Laravelu si třídu jednoduše vložíte do metody a zavoláte ji.

class UserController extends Controller {
    public function store(Request $request, CreateUserAction $createUserAction) {
        $validated = $request->validate([
            'name' => 'required',
            'email' => 'required|email|unique:users',
        ]);

        $createUserAction->execute($validated);

        return back()->with('success', 'Uživatel byl vytvořen pomocí Action.');
    }
}

1. Hlavní výhody a nevýhody

Výhody:

• Znovupoužitelnost: Stejnou akci (CreateUserAction) můžete zavolat z webového controlleru, z API, nebo třeba z importního Artisan příkazu. Nemusíte kód kopírovat.

• Skvělá testovatelnost: Můžete psát unit testy přímo pro danou Action třídu bez nutnosti simulovat celý HTTP request na controller.

• Čitelnost (SRP): Dodržujete princip jedné odpovědnosti. Jedna třída dělá přesně jednu věc. Controllery zůstávají krásně štíhlé.

• Snadná údržba: Pokud se změní proces registrace (např. přidáte odeslání SMS), změníte to pouze na jednom místě v Action třídě.

Nevýhody:

• Více souborů: Pro každou drobnost vytváříte novou třídu, což může při velkém množství akcí působit nepřehledně, pokud nemáte dobrou strukturu složek.

• Režie u jednoduchých operací: Pokud vaše metoda v controlleru pouze uloží jeden záznam do DB, je vytvoření Action třídy pravděpodobně zbytečné.

Závěr: Proč Action Pattern ovládl moderní Laravel aplikace?

Action Pattern se stal v posledních letech standardem v moderním vývoji Laravel aplikací. Zatímco Repository Pattern se stará o to, jak data získáváme, Action Pattern řeší to, co se s daty děje – tedy naši byznys logiku.

Pokud pracujete v týmu nebo budujete projekt, který má přežít déle než pár měsíců, rozbití logiky do Actions je nejlepší způsob, jak udržet kód pod kontrolou. Začněte s ním u procesů, které jsou složité nebo se opakují na více místech, a uvidíte, jak se váš vývojářský život zjednoduší.


Neváhejte se ozvat

Jsme tu pro Vás

Rosteme s každým projektem jako sehraný tým freelancerů a nadšenců. Rychle se spojíme, pobavíme se o vašem byznysu třeba u dobré kávy a společně vytvoříme něco opravdu unikátního. Ať už hledáte nový web, aplikaci nebo kompletní digitální strategii, vždy jdeme do hloubky, abychom pochopili vaše potřeby a přišli s řešením, které dává smysl pro váš byznys. Díky flexibilnímu fungování se vám umíme přizpůsobit časem i stylem spolupráce, takže máte jistotu, že se projektu věnujeme naplno od prvního nápadu až po dlouhodobou podporu.

40+ projektů

Komplexní weby, e-shopy i aplikace napříč segmenty.

< 24 h reakční doba

Ozveme se rychle s jasnými dalšími kroky.

Neváhejte se ozvat