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

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.
پایان
استفاده از قوس تمیز به ایجاد سیستم های سازمان یافته تر ، مدولار و قابل نگهداری کمک می کند. در این مثال ، ما یک ماژول رزرو را با جدا کردن اشخاص ، استفاده از موارد ، مخازن و آداپتورها ساختیم.
با اتخاذ این رویکرد ، به دست می آورید:
- پروژه های ساختاری و مقیاس پذیر تر.
- نگهداری و آزمایش آسان تر.
- انعطاف پذیری بیشتر برای ادغام فن آوری های جدید.
اگر می خواهید عمیق تر به قوس تمیز و لاراول حفر کنید ، در اینجا برخی از منابع مفید وجود دارد: