Laravel için Modüler Mimari (Modular Architecture) Tasarımı

L

Laravel, modern PHP framework'lerinden biri olarak, uygulamaları modüler bir yapıda geliştirmek için güçlü bir esneklik sunar. Özellikle büyük ölçekli projelerde, modüler mimari kullanarak uygulamanızı daha okunabilir, sürdürülebilir ve kolay genişletilebilir hale getirebilirsiniz.

Bu yazıda, Laravel'de modüler mimarinin nasıl uygulanacağını, avantajlarını ve popüler bir paket olan nwidart/laravel-modules kullanarak modüler yapının nasıl kurulacağını detaylı bir şekilde ele alacağız.

Modüler Mimari Nedir?

Modüler mimari, bir uygulamayı modüller halinde bölerek geliştirme yaklaşımıdır. Her modül, uygulamanın belirli bir işlevini kapsayan bağımsız bir birimdir. Örneğin, bir e-ticaret uygulamasında Ürün Yönetimi, Sipariş Yönetimi, Kullanıcı Yönetimi gibi modüller olabilir.

Bu yaklaşımın avantajları:

  1. Kod Yönetimi: Her modül bağımsız olduğu için kod karmaşıklığı azalır.
  2. Ekip Çalışması: Farklı ekip üyeleri farklı modüller üzerinde çalışabilir.
  3. Tekrar Kullanılabilirlik: Modüller başka projelerde kullanılabilir.
  4. Sürdürülebilirlik: Yeni özellikler eklemek veya mevcut olanları değiştirmek daha kolaydır.

Laravel'de Modüler Mimariyi Manuel Uygulama

Laravel'de modüler bir yapı oluşturmak için uygulamanızı manuel olarak bölümlere ayırabilirsiniz.

1. Modül Yapısının Oluşturulması

Proje dizininde her modül için ayrı bir klasör yapısı oluşturabilirsiniz. Örneğin:

app/
└── Modules/
    ├── Products/
    │   ├── Controllers/
    │   ├── Models/
    │   ├── Routes/
    │   └── Views/
    └── Orders/
        ├── Controllers/
        ├── Models/
        ├── Routes/
        └── Views/

2. Modül Dosyalarının Yapılandırılması

Controller:
Modül için özel bir controller oluşturabilirsiniz.

namespace App\Modules\Products\Controllers;

use App\Http\Controllers\Controller;
use App\Modules\Products\Models\Product;

class ProductController extends Controller
{
    public function index()
    {
        $products = Product::all();
        return view('products.index', compact('products'));
    }
}

Model:
Her modül için bağımsız modeller oluşturabilirsiniz.

namespace App\Modules\Products\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $fillable = ['name', 'price', 'description'];
}

Route:
Her modül için özel route dosyası oluşturabilirsiniz ve bu dosyayı RouteServiceProvider içinde yükleyebilirsiniz.

// app/Modules/Products/Routes/web.php
use App\Modules\Products\Controllers\ProductController;

Route::prefix('products')->group(function () {
    Route::get('/', [ProductController::class, 'index'])->name('products.index');
});

View:
Her modül için bağımsız view dosyaları oluşturabilirsiniz.

<!-- resources/views/products/index.blade.php -->
<h1>Ürünler</h1>
<ul>
    @foreach($products as $product)
        <li>{{ $product->name }} - {{ $product->price }}₺</li>
    @endforeach
</ul>

Laravel'de Modüler Mimari için nwidart/laravel-modules Paketi

Manuel bir yapı oluşturmak zaman alıcı ve karmaşık olabilir. Bunun yerine, nwidart/laravel-modules gibi bir paket kullanarak modüler mimariyi hızlı bir şekilde uygulayabilirsiniz.

1. Paketin Kurulumu

composer kullanarak paketi yükleyin:

composer require nwidart/laravel-modules

Ardından, paketin servis sağlayıcısını otomatik olarak kaydetmek için aşağıdaki komutu çalıştırın:

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

2. Yeni Bir Modül Oluşturma

Aşağıdaki komutla bir modül oluşturabilirsiniz:

php artisan module:make Products

Bu komut, aşağıdaki yapıyı oluşturur:

Modules/
└── Products/
    ├── Config/
    ├── Console/
    ├── Http/
    │   ├── Controllers/
    │   └── Middleware/
    ├── Models/
    ├── Providers/
    ├── Resources/
    │   ├── views/
    └── Routes/
        └── web.php

3. Modül İçin Controller ve Model Ekleme

Modülün Http/Controllers dizinine bir controller ekleyebilirsiniz:

namespace Modules\Products\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Products\Entities\Product;

class ProductController extends Controller
{
    public function index()
    {
        $products = Product::all();
        return view('products::index', compact('products'));
    }
}

Modülün Entities klasörüne bir model ekleyebilirsiniz:

namespace Modules\Products\Entities;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $fillable = ['name', 'price', 'description'];
}

4. Modül Route’larını Tanımlama

Modül için rotaları Routes/web.php dosyasına ekleyebilirsiniz:

use Modules\Products\Http\Controllers\ProductController;

Route::prefix('products')->group(function () {
    Route::get('/', [ProductController::class, 'index'])->name('products.index');
});

5. View Dosyalarını Oluşturma

Modülün Resources/views dizininde bir view dosyası oluşturabilirsiniz:

<!-- Modules/Products/Resources/views/index.blade.php -->
<h1>Ürünler</h1>
<ul>
    @foreach($products as $product)
        <li>{{ $product->name }} - {{ $product->price }}₺</li>
    @endforeach
</ul>

Modüler Mimariyi Genişletme

Bir projede birden fazla modül olduğunda, modüller arasında bağımsızlık sağlanabilir. Örneğin, Sipariş Yönetimi modülü tamamen Ürün Yönetimi modülünden ayrı olabilir. Modüller arasındaki iletişim, servis sınıfları veya API üzerinden sağlanabilir.

Sonuç

Laravel'de modüler mimari, büyük ölçekli projelerde sürdürülebilirliği ve kodun okunabilirliğini artırmak için etkili bir yaklaşımdır. nwidart/laravel-modules gibi bir paket kullanarak bu yapıyı hızlıca hayata geçirebilir ve projelerinizi daha düzenli hale getirebilirsiniz.

Bu yapı, özellikle ekip çalışmasında, modüller arasında net sınırlar çizerek karmaşıklığı azaltır ve projelerinizi daha yönetilebilir kılar. Laravel'in sağladığı esnek yapı, modüler mimariyi kolayca uygulamanıza olanak tanır.

By Aydın Yağız

Aydın Yağız

Teknolojiye olan tutkumla inovasyonu destekler, kullanıcı deneyimini önceliklerim arasına alırım. Kendi yeteneklerimi ve bilgilerimi paylaşarak, daha geniş bir topluluğun faydalanmasını sağlarım. İş birliği içinde hareket ederek, geleceğin teknoloji dünyasına katkıda bulunmayı hedeflerim. Sizi de bu heyecan verici yolculuğa davet ediyor, fikirlerinizi paylaşmaya ve teknolojiye dair sınırları zorlamaya teşvik ediyorum. Birlikte büyüyelim ve yeni ufuklara açılalım!

İletişime Geçin

Kodlama dünyasına adım atın ve deneyimlerinizi paylaşın. Siz de bu aktif topluluğa katılarak yeni bağlantılar kurun, fikir alışverişinde bulunun ve bilgi birikiminizi artırın.

Özelleştir

Farklı yazı tipleri ve renk seçenekleriyle stilinizi kişiselleştirin. Aşağıdaki örneklerden birini deneyerek sizin için en uygun olanı seçin.

Yazı Tipi Örnekleri

Renk Örnekleri