Sitemize hoşgeldiniz!  ::  Son eklenen yazı: Git’te “master” mı “main” mi? Bir kelimenin ardındaki hikâye  ::  Toplam 63 yazı  ::  Görüş ve önerileriniz için iletişim sayfasını kullanabilirsiniz.
» Menü
Anasayfa
Hakkımda
İletişim
» Kategoriler
› nostalji (8)
› laravel (7)
› php (5)
› web (3)
› agile (3)
› go (2)
› golang (2)
› api (2)
› redis (2)
› git (2)
› github (2)
› model (1)
» Arşiv
› Ekim 2025 (2)
› Temmuz 2025 (1)
› Nisan 2025 (3)
› Mart 2025 (5)
› Şubat 2025 (1)
› Ocak 2025 (43)
› Haziran 2011 (1)
› Kasım 2009 (1)
› Temmuz 2009 (1)
› Temmuz 2007 (1)
› Ocak 2007 (1)
› Kasım 2006 (1)
› Ekim 2006 (1)
› Ağustos 2006 (1)
Anasayfa » Yazılar » Laravel Modüler Mimari
Laravel Modüler Mimari
Yazan: Atilla Mutlu | Tarih: 15.01.2025 15:04 | Kategori: laravel

Mikroservis mimarisi, büyük ve karmaşık projelerde servislerin bağımsız olarak geliştirilip yönetilmesini sağlar. Ancak, Laravel projelerinde bu yapıyı doğrudan uygulamak yerine, modüler mimari kullanarak benzer bir yapı elde edebiliriz. Laravel'in "Modüler Mimari" desteği, tek bir uygulama içerisinde servisleri bağımsız bir şekilde geliştirmemizi sağlar. Bu makalede, nwidart/laravel-modules paketi kullanarak nasıl modüler bir yapı oluşturabileceğimizi inceleyeceğiz.


Modüler Mimari Nedir?

Modüler mimari, uygulamayı birden fazla bağımsız modüle ayırarak yönetilebilir ve ölçeklenebilir hale getiren bir yaklaşımdır. Her modül, belirli bir işlevi yerine getiren bağımsız bir yapı olarak geliştirilir. Örneğin:

  • UserManagement: Kullanıcı yönetimiyle ilgili işlemler.
  • OrderManagement: Sipariş yönetimiyle ilgili işlemler.
  • ProductManagement: Ürün yönetimiyle ilgili işlemler.

1. Paket Kurulumu

nwidart/laravel-modules paketi, Laravel'de modüler bir yapı oluşturmak için kullanılır. Paketi kurmak için aşağıdaki adımları takip edebilirsiniz:

Paket Kurulumu

composer require nwidart/laravel-modules

Yapılandırma Dosyalarını Yayınla

php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider"

Bu işlem, config/modules.php dosyasını oluşturur. Burada modüllerinize ilişkin ayarları yönetebilirsiniz.


2. Modül Oluşturma

Yeni bir modül oluşturmak için aşağıdaki komutu kullanabilirsiniz:

php artisan module:make UserManagement

Bu komut, Modules dizini altında bir modül oluşturur:

Modules/
  └── UserManagement/
      ├── Config/
      ├── Http/
      │   ├── Controllers/
      │   ├── Middleware/
      │   └── Requests/
      ├── Models/
      ├── Resources/
      │   ├── views/
      │   └── lang/
      ├── Routes/
      └── ...

Her modül kendi içerisinde bağımsız bir Laravel uygulaması gibi davranır.


3. Modül Bazlı Yapılandırma

3.1. Modül Bazlı Routing

Her modülün kendi rotalarını tanımlayabilmesi için Routes dizininde bir web.php dosyası oluşturulur.

Modules/UserManagement/Routes/web.php:

use Modules\UserManagement\Http\Controllers\UserController;

Route::prefix('user-management')->group(function () {
    Route::get('/users', [UserController::class, 'index']);
});

Laravel bu rotaları otomatik olarak yükler.

3.2. Modül Bazlı Controller

Modüllerin kendi controller sınıfları Http/Controllers dizininde tanımlanır.

Modules/UserManagement/Http/Controllers/UserController.php:

namespace Modules\UserManagement\Http\Controllers;

use App\Http\Controllers\Controller;

class UserController extends Controller
{
    public function index()
    {
        return view('usermanagement::users.index');
    }
}

3.3. Modül Bazlı View

Her modülün kendine özgü view dosyaları Resources/views dizininde saklanır.

Modules/UserManagement/Resources/views/users/index.blade.php:

<h1>Kullanıcı Yönetimi</h1>

4. Modüller Arası İletişim

4.1. Service Providers

Modüller arasında bağımlılık yönetimini kolaylaştırmak için her modül bir ServiceProvider tanımlar.

Modules/UserManagement/Providers/UserManagementServiceProvider.php:

namespace Modules\UserManagement\Providers;

use Illuminate\Support\ServiceProvider;

class UserManagementServiceProvider extends ServiceProvider
{
    public function register()
    {
        // Modüle özel servisler kaydedilir.
    }

    public function boot()
    {
        $this->loadRoutesFrom(__DIR__ . '/../Routes/web.php');
    }
}

4.2. Event ve Listener ile İletişim

Laravel’in Event-Listener yapısını kullanarak modüller arasında iletişim sağlayabilirsin.

Event Tanımlama:
Modules/UserManagement/Events/UserRegistered.php:

namespace Modules\UserManagement\Events;

use Illuminate\Queue\SerializesModels;

class UserRegistered
{
    use SerializesModels;

    public $user;

    public function __construct($user)
    {
        $this->user = $user;
    }
}

Listener Tanımlama:
Modules/OrderManagement/Listeners/CreateWelcomeOrder.php:

namespace Modules\OrderManagement\Listeners;

use Modules\UserManagement\Events\UserRegistered;

class CreateWelcomeOrder
{
    public function handle(UserRegistered $event)
    {
        // Sipariş oluşturma işlemi
    }
}

5. Modüllerin Yönetimi

Modül Listeleme

Tüm modülleri listelemek için:

php artisan module:list

Modül Aktif/Pasif Yapma

Bir modülü aktif veya pasif hale getirebilirsiniz:

php artisan module:enable UserManagement
php artisan module:disable UserManagement

6. Test ve İzolasyon

Her modül kendi testlerini bağımsız olarak yazabilir.

Modules/UserManagement/Tests/Feature/UserTest.php:

namespace Modules\UserManagement\Tests\Feature;

use Tests\TestCase;

class UserTest extends TestCase
{
    public function test_user_list_is_accessible()
    {
        $response = $this->get('/user-management/users');
        $response->assertStatus(200);
    }
}

Sonuç

Laravel'in modüler mimarisi, tek bir uygulama içinde mikroservis benzeri bir yapı oluşturmanı sağlar. Bu yaklaşım, kodun daha düzenli, ölçeklenebilir ve yönetilebilir olmasına katkıda bulunur. Özellikle büyük projelerde, modüller arasında bağımsız geliştirme yapılabilir ve böylece ekipler birbirinden izole bir şekilde çalışabilir.

Daha fazla detay veya örnek uygulama için Laravel dokümantasyonunu ve nwidart/laravel-modules paketinin kılavuzunu inceleyebilirsin.

« Geri dön | Yorum gönder | Yukarı ↑
» Hakkımda
A
Atilla Mutlu
Yazılım Geliştirici

Devamını oku »
» Son Yazılar
› Git’te “master” mı “main” mi? Bir kelimenin ardındaki hikâye
› Laravel Model Controller
› PostgreSQL Mini‑Kılavuz
› ReactJS Rehberi
› Spatie Laravel Paketleri
» İstatistik
Ziyaretçi Sayısı
036360
Toplam yazı: 63
PHPpowered SQLiteinside Firefoxile daha iyi CSStables ♥
Bu site en iyi 1024x768 çözünürlükte görüntülenir.
Copyright © 2006-2026
Anasayfa | Hakkımda | İletişim | Yukarı ↑
Bu sayfa 0,021 saniyede oluşturuldu.