Laravel ilə Layihə Memarlığının Qurulması

Laravelin təqdim etdiyi alətlərlə təmiz, miqyaslana bilən və davamlı layihə memarlığı yaratmağın üsullarını addım-addım öyrənin.
Laravel ilə Layihə Memarlığının Qurulması - bimakale.com
26 Ağustos 2026 Çarşamba - 07:03 (5 Gün önce) 6 dk okuma

Laravelin Əsas Memarlığı: MVC-dən Əlavə

Laravel, MVC (Model-View-Controller) strukturunu əsas götürür, lakin bu strukturu genişləndirərək daha çevik və idarəolunan layihələr yaratmağa imkan verir. Standart MVC yanaşması kiçik və orta həcmli layihələrdə kifayət etsə də, böyük tətbiqlərdə kod təkrarı, asılılıqların idarə edilməsi və test olunabilirlik kimi problemlər yarana bilir. Laravelin təqdim etdiyi Service Providers, Dependency InjectionContracts kimi xüsusiyyətlər bu problemlərin aradan qaldırılması üçün istifadə olunur.

Məsələn, e-ticarət tətbiqində sifariş əməliyyatlarını birbaşa OrderController daxilində yazmaq əvəzinə, OrderService adlı xidmət təbəqəsi yarada bilərsiniz. Bu təbəqə iş məntiqini saxlayır və controllerlərdən müstəqil olaraq test edilə bilir. Laravelin app/Services qovluğu bu cür strukturları təşkil etmək üçün ideal yerdir.

Modullu Yanaşma: Paketlər və Domain-Driven Design

Böyük layihələrdə kodun bölümlərə ayrılması, texniki xidmət və yeniləmə proseslərini asanlaşdırır. Laravel paketlər (packages) və modullar vasitəsilə bu bölmələndirməni dəstəkləyir. Məsələn, istifadəçi idarəetmə sistemi, fatura modulu və hesabat aləti ayrı-ayrı paketlər kimi inkişaf etdirilə bilər. Bu yanaşma hər bir modulun müstəqil olaraq yenilənməsinə və təkrar istifadəsinə imkan verir.

Domain-Driven Design (DDD) prinsipləri də Laravel layihələrində tətbiq oluna bilər. DDD iş məntiqini domain təbəqəsində cəmləşdirərək texniki detallardan müstəqil struktur yaratmağı hədəfləyir. Laravelin app/Domain qovluğu altında domain modelləri, repositorylər və xidmətlər təyin edilə bilər. Bu sayədə layihənin iş məntiqi mərkəzləşdirilir və kodun oxunaqlığı artır.

Nümunə olaraq, User modeli əvəzinə UserEntity, UserRepositoryUserService kimi komponentlər yarada bilərsiniz. UserEntity verilənlər bazası cədvəli ilə əlaqəli sahələri saxlayarkən, UserRepository verilənlər bazası əməliyyatlarını idarə edir. UserService isə bu komponentləri istifadə edərək iş məntiqini həyata keçirir.

Repository Pattern və Verilənlər Bazasının Abstraksiyası

Laravelin Eloquent ORM vasitəsi verilənlər bazası əməliyyatlarını asanlaşdırsa da, böyük layihələrdə birbaşa model istifadəsi asılılıqları artıra bilər. Repository Pattern verilənlər bazası əməliyyatlarını abstraksiya edərək bu asılılıqları azaldır. Məsələn, ProductRepository sinifi bütün məhsul ilə bağlı verilənlər bazası əməliyyatlarını (əlavə etmə, yeniləmə, silmə, sorğulama) idarə edir. Bu sayədə verilənlər bazası dəyişiklikləri yalnız repository təbəqəsində edilir və layihənin digər hissələri təsirlənmir.

Laraveldə repository pattern tətbiq etmək üçün app/Repositories qovluğu yarada və burada interfeyslər təyin edə bilərsiniz. Məsələn:

interface ProductRepositoryInterface {
    public function all();
    public function find(int $id);
    public function create(array $data);
    public function update(int $id, array $data);
    public function delete(int $id);
}

Daha sonra bu interfeysi tətbiq edən EloquentProductRepository sinifi yarada bilərsiniz. Bu sinif Eloquent modelindən istifadə edərək verilənlər bazası əməliyyatlarını yerinə yetirir. Controllerlər isə yalnız interfeysə asılı olur, beləliklə test olunabilirlik və çeviklik artır.

Xidmət Təbəqəsi və İş Məntiqinin Ayrılması

Controllerlər HTTP sorğularını idarə etməkdən məsul olmalı və iş məntiqini mümkün qədər xidmət təbəqəsinə ötürməlidir. Məsələn, sifariş yaratma əməliyyatı birbaşa OrderController daxilində yazılmaq əvəzinə OrderService sinfinə köçürülə bilər. Bu sayədə eyni iş məntiqi fərqli controllerlər və ya CLI komandaları tərəfindən də istifadə edilə bilər.

Laravelin Service Containerı xidmətlərin asılılıqlarını idarə etmək üçün istifadə olunur. Məsələn, OrderService sinifi ProductRepositoryPaymentService kimi asılılıqları konstruktor vasitəsilə alır. Bu asılılıqlar Laravelin containeri tərəfindən avtomatik olaraq həll edilir:

class OrderService {
    protected $productRepository;
    protected $paymentService;

    public function __construct(
        ProductRepositoryInterface $productRepository,
        PaymentService $paymentService
    ) {
        $this->productRepository = $productRepository;
        $this->paymentService = $paymentService;
    }

    public function createOrder(array $orderData) {
        // İş məntiqi burada həyata keçirilir
    }
}

Bu struktur xidmətlərin test edilməsini də asanlaşdırır. Məsələn, OrderServicei test edərkən real ProductRepository əvəzinə mock repository istifadə edə bilərsiniz.

Test Olunabilirlik və Laravelin Təqdim Etdiyi Alətlər

Laravel test olunabilən kod yazmağı təşviq edən bir sıra alətlər təqdim edir. PHPUnit inteqrasiyası, HTTP testləri, verilənlər bazası testləri və mocking alətləri layihənin hər bir təbəqəsinin test edilməsini təmin edir. Məsələn, controller testi zamanı xidmət təbəqəsinin mocklanması ilə HTTP cavabları yoxlanıla bilər:

public function test_order_creation() {
    $mockOrderService = $this->createMock(OrderService::class);
    $mockOrderService->method('createOrder')->willReturn(true);

    $response = $this->post('/orders', [
        'product_id' => 1,
        'quantity' => 2
    ]);

    $response->assertStatus(201);
}

Repository pattern və xidmət təbəqəsi istifadəsi testlərin daha fokuslu və sürətli işləməsini təmin edir. Bundan əlavə, Laravelin Http FacadesDatabase Transactions kimi xüsusiyyətləri testlərin daha etibarlı olmasına kömək edir.

Laravel ilə layihə memarlığı yaradarkən kodun oxunaqlığı, davamlılığı və miqyaslana bilməsi ön planda saxlanılmalıdır. Modullu yanaşma, xidmət təbəqəsi və repository pattern kimi üsullar bu məqsədlərə çatmaq üçün effektiv vasitələr təqdim edir. Layihənin böyüklüyündən və mürəkkəbliyindən asılı olaraq bu strukturları uyğunlaşdırmaq uzun müddətdə texniki xidmət xərclərini azaldır və inkişaf prosesini sürətləndirir.

Alakalı İçerikler


  • Laravel
  • proje mimarisi
  • PHP framework
  • modüler geliştirme
  • MVC
  • servis katmanı
  • repository pattern



Şərhlər
Şərhinizi əlavə edin
Kullanıcı
0 xarakter
Müəllifin digər etiketləri Hamısını göstər
Populyar Etiketlər Hamısını göstər
Müəllifin digər məzmunu