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

سلام و عرض ادب

با این روشی که استاد فرمودند، ما توی constructor سرویسمون فقط میتونیم از کلاس هایی استفاده کنیم که از نوع DownloadableFile هستن:

<?php
namespace Src\\Solid\\Lsp;
class FileService
{
    public function __construct(private DownloadableFileInterface $file)
    {
    }
    public function download()
    {
        return $this->file->download();
    }
}

حالا اینجا سوالی که پیش میاد اینه که ما اگر بخوایم از LocalFile به جای مثلا DropBoxFile استفاده کنیم چی میشه؟

اگر که LocalFile پاس داده بشه چون که از نوع DownloadableFileنیست، به خطا میخوریم، و اگر هم که بیایم متد construct سرویسمون رو عوض کنیم بگیم به جای DownloadableFileInterface باید FileInterface بگیری هم که عملا داریم OCP رو نقض میکنیم.

راه حلش چیه؟

سلام خدمت شما. این طور در نظر بگیرید که هر سرویس به طور مجزا می‌تونه اون FileInterface یا DownloadableFileInterface رو پیاده سازی کنه. مثلا یک سرویس داریم به اسم FileManager که فقط روی لوکال‌ها کار میکنه و یک سرویس دیگه داریم به اسم DownloadManager که فقط روی DownloadableFileInterface کار می‌کنه. اینطوری مشکلی برای این موضوع پیش نمیاد. باید حواستون باشه مثلا هم Manage کردن فایل لوکال و هم عملیات دانلود می‌تونه باعث نقض SRP بشه. پس بر اساس نیاز می‌تونیم سرویس‌های مختلف بر اساس Interface‌های مختلف داشته باشیم.

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