برنامه نویسی

استفاده از قوس تمیز در لاراول

Clean Arch یک مدل معماری است که به ساختار برنامه ها به روشی سازمان یافته ، جدا کردن مسئولیت ها و تسهیل نگهداری کد کمک می کند. در این پست ، نحوه استفاده از قوس تمیز در لاراول را بررسی خواهیم کرد.

اصول معماری تمیز

معماری تمیز پیشنهاد جدا کردن برنامه را به لایه های خوب تعریف شده پیشنهاد می کند:

  • نهادها: قوانین تجاری خالص و مستقل.
  • موارد استفاده: منطق برنامه را پیاده سازی کنید.
  • رابط ها و آداپتورها: ارتباط بین موارد استفاده و زیرساخت ها (HTTP ، پایگاه داده و غیره).
  • چارچوب ها و درایورها: لاراول ، فصیح ، کنترل کننده ها و هر فناوری اجرای خاص.

این رویکرد جفت شدن را کاهش داده و تکامل سیستم را بدون تأثیر کل ساختار تسهیل می کند.

نمونه

برای ارائه یک تصویر واضح ، یک سیستم رزرو ساده به عنوان نمونه ما خدمت می کند.


برای ارائه یک تصویر واضح ، یک سیستم رزرو ساده به عنوان نمونه ما خدمت می کند.

مثال: نهاد نماینده قانون تجارت برای رزرو است و به چارچوب بستگی ندارد:



namespace App\Domain\Entities;

class Booking
{
    public function __construct(
        public int $userId,
        public int $serviceId,
        public string $date
    ) {
        // Business rule can be applied here
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


ایجاد رابط مخزن

مخزن پایداری را تعریف می کند اما به فصیح بستگی ندارد:



namespace App\Domain\Repositories;

use App\Domain\Entities\Booking;

interface BookingRepositoryInterface
{
    public function save(Booking $booking): Booking;
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


اجرای ایجاد usecase ایجاد

منطق ایجاد رزرو در یک مورد استفاده جدا شده است:



namespace App\Application\UseCases;

use App\Domain\Entities\Booking;
use App\Domain\Repositories\BookingRepositoryInterface;

class CreateBooking
{
    public function __construct(private BookingRepositoryInterface $repository) {}

    public function execute(array $data): Booking
    {
        if (strtotime(data_get($data, 'date')) < time()) {
            throw new \Exception("It is not possible to book for past dates.");
        }

        $booking = new Booking(data_get($data, 'user_id'), data_get($data, 'service_id'), data_get($data, 'date'));
        return $this->repository->save($booking);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


اجرای مخزن فصیح

اجرای مخزن بتونی با استفاده از فصلی:



namespace App\Infrastructure\Persistence;

use App\Domain\Entities\Booking;
use App\Domain\Repositories\BookingRepositoryInterface;
use App\Models\Booking as BookingModel;

class EloquentBookingRepository implements BookingRepositoryInterface
{
    public function save(Booking $booking): Booking
    {
        $model = BookingModel::create([
            'user_id' => $booking->userId,
            'service_id' => $booking->serviceId,
            'date' => $booking->date,
        ]);

        return new Booking($model->user_id, $model->service_id, $model->date);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


ایجاد کنترلر

کنترل کننده از مورد استفاده برای رسیدگی به درخواست های HTTP استفاده می کند:



namespace App\Infrastructure\Http\Controllers;

use App\Application\UseCases\CreateBooking;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use use Illuminate\Validation\ValidationException;
use Throwable;

class BookingController
{
    public function __construct(private readonly CreateBooking $createBooking) {}

    public function store(Request $request): JsonResponse
    {
        $data = $request->validate([
            'user_id' => 'required|integer',
            'service_id' => 'required|integer',
            'date' => 'required|date',
        ]);

        try {
            $booking = $this->createBooking->execute($data);
            return response()->json(['message' => 'Booking successfully created', 'data' => $booking], 201);
        } catch (ValidationException $e) {
            return response()->json(['error' => $e->errors()], 422);
        }catch (Throwable $e) {
            return response()->json(['error' => $e->getMessage()], 400);
        }
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


اتصال همه چیز در لاراول

برای تزریق مخزن صحیح به برنامه ، آن را در پیکربندی کنید AppServiceProvider:



use App\Domain\Repositories\BookingRepositoryInterface;
use App\Infrastructure\Persistence\EloquentBookingRepository;

$this->app->bind(BookingRepositoryInterface::class, EloquentBookingRepository::class);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


مزایای معماری تمیز در لاراول

  • کد مدولار: Facilitates technology and framework changes.

  • آزمایش آسانتر: Use cases and entities can be tested in isolation.

  • اتصال کمتر: Allows replacing the ORM, framework, or any layer without affecting the entire application.


پایان

استفاده از قوس تمیز به ایجاد سیستم های سازمان یافته تر ، مدولار و قابل نگهداری کمک می کند. در این مثال ، ما یک ماژول رزرو را با جدا کردن اشخاص ، استفاده از موارد ، مخازن و آداپتورها ساختیم.

با اتخاذ این رویکرد ، به دست می آورید:

  • پروژه های ساختاری و مقیاس پذیر تر.
  • نگهداری و آزمایش آسان تر.
  • انعطاف پذیری بیشتر برای ادغام فن آوری های جدید.

اگر می خواهید عمیق تر به قوس تمیز و لاراول حفر کنید ، در اینجا برخی از منابع مفید وجود دارد:

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا