Laravel Modularizáció: Az Alkalmazás Fejlesztés Alternatív Útja

Laravel Modularizáció: Az Alkalmazás Fejlesztés Alternatív Útja

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ákat
  • mergeConfigFrom: 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 tenni
  • loadTranslationsFrom: Fordítási fájlok betöltése
  • loadViewComponentsAs: 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!

 

Budai Zsolt

Budai Zsolt

Fejlesztő