نصائح لارافيل : كيفية كتابة كود نظيف clean code في حال وجود الكثير من الجمل الشرطية في لارافيل

نصائح لارافيل : كيفية كتابة كود نظيف clean code في حال وجود الكثير من الجمل الشرطية في لارافيل

2024-05-15 وقت القراءه : 1 دقائق

ببعض الأحيان نجد أنفسنا أننا كتبنا الكثير من الدالة الشرطية if statement بداخل أحد دوال الـ controller، وهذا يجعل الكود صعب في القراءه والفهم، ويكون متعب في حال أردنا التعديل على أي جزء في الكود.

هيا بنا نلقي نظره على هذا الكود

public function create(Report $report, $type)
{
    if ($type == 1)
        return view('items.inventory.create', ['report' => $report]);
    elseif ($type == 2)
        return view('items.stock.create', ['report' => $report]);
    elseif ($type == 3)
  return view('items.special.create', ['report' => $report]);
}

الكود أعلاه يعمل بشكل سليم، لكن ماذا لو كانت الجمل الشرطية أكثر ونريد إستخدامها في دالة أخرى، فذلك سوف يسبب عبئ كبير، وسيزداد العبئ كلما كبر المشروع.

لتسهيل الكود أعلاه، بداية يجب تعريف ثوابت constant بداخل model، وهذا يجعله أسهل ,افضل للقراءه 

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Item extends Model
{
    use HasFactory;

    const INVENTORY = 1;
    const STOCK = 2;
    const SPECIAL = 3;
    
}

بعد أن تم تعريف الثوابت وقيمة كل ثابت، نعود إلى الـ controller وننشئ دالة جديده تقوم بمعالجة النوع وبناءً على النوع تقوم بإرجاع المسار route الصحيح، وهذا الدالة تستدعي دالة أخرى تستقبل النوع وترجع المسار route الصحيح

<?php

namespace App\Http\Controllers;

use App\Models\Report;
use App\Models\Item;
use Illuminate\Http\Request;

class ItemController extends Controller
{
  public function create(Report $report, $type)
  {
    return view($this->filterItems($type), ['report' => $report]);
  }
  
  protected function filterItems($type)
  {
    $items = [
      Item::INVENTORY => 'items.inventory.create',
      Item::STOCK => 'items.stock.create',
      Item::SPECIAL => 'items.special.create',
    ];
    return $items[$type];
  }
}

كما نلاحظ أن الدالة create أصبح الكود بداخلها عبارة عن سطر احد، حيث تستدعي الدالة filterItems التي تستقبل النوع (1,2,3)، وبناءً عليه ترجع المسار route للدالة create.

هذه الطريقة يمكن إتباعها أينما وجدنا أنفسنا نتعامل مع الكثير من الجمل الشرطية if-statement وبنفس الوقت نريد كود نظيف.

إضافة تعليق
Loading...