💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ پویا پارسایی
آیا استفاده از interfaceها برای inject کردن سرویس در کنترلر کار درستی است؟
جامعه مهندسی نرم افزار ایجاد شده در ۱۹ فروردین ۱۴۰۲

سلام و عرض ادب

آیا اینکه ما بیایم واسه هر سرویسی که میخوایم استفاده کنیم، یک interfaceبسازیم و اون اینترفیس رو داخل کنترلرمون injectکنیم کار درستیه؟

به طور مثال به جای:

<?php
namespace App\\Http\\Controllers\\Api\\V1\\Application;
use App\\Http\\Controllers\\Api\\V1\\ApiBaseController;
use App\\Http\\Requests\\Api\\V1\\Application\\Address\\StoreRequest;
use App\\Services\\AddressService;
class AddressController extends ApiBaseController
{
    public function __construct(private AddressService $addressService)
    {
    }
    public function store(StoreRequest $request)
    {
        $this->addressService->create($request->user(), $request->validated());
    }
}

به این صورت پیاده سازی کنیم:

<?php
namespace App\\Http\\Controllers\\Api\\V1\\Application;
use App\\Http\\Controllers\\Api\\V1\\ApiBaseController;
use App\\Http\\Requests\\Api\\V1\\Application\\Address\\StoreRequest;
use App\\Services\\AddressServiceInterface;
class AddressController extends ApiBaseController
{
    public function __construct(private AddressServiceInterface $addressService)
    {
    }
    public function store(StoreRequest $request)
    {
        $this->addressService->create($request->user(), $request->validated());
    }
}

و در نهایت هم توی provider بیایم AddressService رو به AddressServiceInterfaceبه اصطلاح bind کنیم.

سلام خدمت شما، برای هر کاری باید دلیل داشته باشیم. وقتی دلیلی برای این کار وجود نداره قطعا نباید کد اضافه تولید کنیم و پیچیدگی به کدهامون اضافه کنیم. تا زمانی که لازم نشده نباید یک لایه Abstraction ایجاد کنیم.

بهترین پاسخ
کیوان علی محمدی ۲۵ فروردین ۱۴۰۲، ۰۹:۳۷