تصميم الخلفية

بنية Laravel للمؤسسات: Repository Pattern و Service Layer و DDD

بناء تطبيقات Laravel للمؤسسات مع repository pattern و service layer ومبادئ DDD. أنماط إنتاجية من أنظمة الحكومة والرعاية الصحية.

Khalid Aboubakr
20 دقيقة قراءة
LaravelPhpEnterprisePatternsArchitectureRepository PatternService LayerDdd

مقدمة

بنية MVC في Laravel تعمل بشكل جيد للتطبيقات البسيطة، لكن أنظمة المؤسسات تتطلب المزيد. الكونترولرات السمينة واستدعاءات النماذج في كل مكان ومنطق العمل المبعثر عبر قاعدة الكود تصبح كوابيس صيانة.

تقدم هذه المقالة الأنماط التي استخدمتها لبناء تطبيقات Laravel قابلة للصيانة في قطاعات الحكومة والرعاية الصحية.

ما وراء الكونترولرات السمينة

نمط الإجراء

فئات الإجراء أحادية الغرض تحافظ على الكود مركزاً وقابلاً للاختبار:

<?php class CreateOrderAction { public function __construct( private InventoryService $inventory, private PaymentService $payment ) {} public function execute(User $user, CreateOrderDTO $dto): Order { return DB::transaction(function () use ($user, $dto) { $this->inventory->reserve($dto->items); $order = Order::create([ 'user_id' => $user->id, 'status' => OrderStatus::PENDING, 'total_amount' => $dto->calculateTotal(), ]); event(new OrderCreated($order)); return $order; }); } } // الكونترولر يصبح نحيفاً class OrderController extends Controller { public function store( CreateOrderRequest $request, CreateOrderAction $action ): JsonResponse { $order = $action->execute( $request->user(), CreateOrderDTO::fromRequest($request) ); return response()->json(new OrderResource($order), 201); } }

كائنات نقل البيانات

DTOs توفر أمان النوع والتحقق في مكان واحد.

نمط المستودع بشكل صحيح

متى تضيف المستودعات قيمة

<?php interface PatientRepositoryInterface { public function findById(string $id): ?Patient; public function search(PatientSearchCriteria $criteria): LengthAwarePaginator; } class EloquentPatientRepository implements PatientRepositoryInterface { public function search(PatientSearchCriteria $criteria): LengthAwarePaginator { $query = Patient::query(); if ($criteria->name) { $query->where('first_name', 'ILIKE', "%{$criteria->name}%"); } return $query->paginate($criteria->perPage); } }

أحداث النطاق

افصل التأثيرات الجانبية عن المنطق الأساسي:

<?php class OrderCreated { public function __construct(public readonly Order $order) {} } // المستمعون يتعاملون مع التأثيرات الجانبية بشكل مستقل class SendOrderConfirmationEmail { public function handle(OrderCreated $event): void { Mail::to($event->order->user->email) ->queue(new OrderConfirmationMail($event->order)); } }

طبقة الخدمة

لعمليات العمل المعقدة التي تمتد عبر نماذج متعددة.

الخلاصة

تطبيقات Laravel للمؤسسات تستفيد من:

  1. فئات الإجراء للعمليات أحادية الغرض
  2. DTOs لنقل البيانات الآمن من حيث النوع
  3. المستودعات لمنطق الاستعلام المعقد
  4. أحداث النطاق للتأثيرات الجانبية المفصولة
  5. طبقة الخدمة لمنطق العمل المشترك

هذه الأنماط تضيف هيكلاً دون هندسة مفرطة. ابدأ بسيطاً وقدمها مع نمو التعقيد.

مقالات ذات صلة

هندسة البرمجياتقراءة 25 دقيقة

سياقات DDD المحددة: دليل التنفيذ الكامل

تعلم كيفية تنفيذ السياقات المحددة في التصميم المبني على النطاق. دليل عملي يغطي خرائط السياق والتجميعات وأحداث النطاق وأمثلة حقيقية.