Mi az a Modularizáció?
A modularizáció olyan fejlesztési technika, amely során a kódot kisebb, független egységekre (modulokra) bontjuk. Minden modul felelős egy adott funkcióért vagy üzleti logikáért, és önállóan fejleszthető, tesztelhető és karbantartható. Ez a megközelítés számos előnnyel jár:
- Karbantarthatóság: Könnyebb megérteni és módosítani a kisebb, jól definiált modulokat.
- Újrafelhasználhatóság: A modulokat újra fel lehet használni más projektekben vagy ugyanazon projekt más részeiben.
- Tesztelhetőség: A kisebb egységek könnyebben tesztelhetők, ami növeli a kód minőségét.
- Csapatmunka: A fejlesztők különböző modulokon dolgozhatnak párhuzamosan, ami növeli a fejlesztés hatékonyságát.
Modularizáció Laravelben
Laravelben többféleképpen is megvalósítható a modularizáció. Az egyik legelterjedtebb módszer a csomagok (packages)
használata, erről késöbb lesz egy másik bejegyzés is, de az újabb trendek között szerepel a moduláris dizájn alkalmazása.
Ezt a struktúrát gyakran használják nagyobb alkalmazásoknál, ahol különböző funkciók (pl. felhasználókezelés, termékkatalógus, rendeléskezelés) külön modulokban helyezkednek el.
Modul létrehozása
Az alkalmazás gyökér könyvtárában hozzunk létre egy modules
mappát, majd ebbe pedig még egyet aminek a neve a modul neve legyen, pl Payment
. Utána a composer.json
fáljba, az autoload
szekcióhoz, adjuk hozzá a modules
mappát: "Modules\\": "modules/"
.
Ebben a mappában a modulunkat tesztés szerint struktúrálhatjuk de célszerű egy mini-Laravel app-ként kezelni, gondolok itt például a főbb Providers, Routers, Database, Config mappákra.
Modul Provider
A modul leglényegesebb pontja a Provider, ami befogja tölteni az egész modulunkat a fő applikációba. Ezt a belépő Providert is célszerű a modul nevére utaló módon elnevezni, pl. PaymentServiceProvider
, mivel ezt az egyet bekell tenni a Laravel applikáció, config/app.php
providers tömbjébe, hogy teljesen betöltse azt.
Az itt található Provider-ek a Laravel applikációk szíve, ezek töltik be a teljes alkalmazást, minden itt található Provider kétszer fut le, először a register
metódusa, itt még nem érhető el a többi Provider, illetve a legtöbb Facade
se, másodjára pedig boot
metódusa, itt már elérhető szinte minden.
A Provider osztályunknak extendelni kell a Illuminate\Support\ServiceProvider
-t.
Fontossabb Provider metódusok
loadMigrationsFrom
: Migrációs fájlok betöltésére, így a migrálásnál automatikusan létre fogja hozni a táblákatmergeConfigFrom
: Konfigurációs fájlok betöltése, a második paraméter lesz a prefix (payment.)loadViewsFrom
: Nézet fájlok betöltése, a második paraméter lesz a prefix (payment::)loadRoutesFrom
: Route-ok betöltése, bár ezt célszerű egy külön Route Provider-be tenniloadTranslationsFrom
: Fordítási fájlok betöltéseloadViewComponentsAs
: Nézet komponensek betöltése
Tetszés szerint létrehozhatunk bármilyen Providert, de van néhány amihez másik Laravel-es Providert kell kiterjeszteni:
RouteServiceProvider
EventServiceProvider
BladeServiceProvider
BroadcastServiceProvider
Ezekután a modulunkat úgy tudjuk feljeszteni mint egy bármilyen másik Laraveles appot.
Előnyei
- Nagy alkalmazások felbontása
- Kisebb, újrahasználható modulok
- Modulok projektre szabhatósága
- Nagy csapatban könnyebb a fejlesztés
- Könnyebb karbantartás
- PHP-s modulokat egyszerű készíteni
Hátrányai
- Modulok projektre szabhatósága
- Minden modult bekell "boot"-olni
- Lassulhat az alkalmazás
- JavaScript modulok bonyolultak (Vite/Webpack)
Összegzés
A Laravel modularizációja segít abban, hogy a projektjeinket tisztán, rendezett formában tartsuk, és lehetővé teszi, hogy a kódunk könnyen karbantartható és újrafelhasználható legyen. Akár csomagokkal, akár moduláris dizájnnal dolgozunk, a megfelelő struktúra kialakítása jelentős előnyt biztosít a hosszú távú fejlesztési folyamat során. Próbáljuk ki ezt a megközelítést a következő projektünkben, és tapasztaljuk meg a modularizáció előnyeit!