دسته: design patterns

  • مفهوم DTO چیست؟

    DTO مخفف Data Transfer Object است، یک الگوی طراحی که برای انتقال داده‌ها بین لایه‌های مختلف یک سیستم بدون منطق پیچیده به کار می‌رود. هدف اصلی DTO این است که داده‌ها را از یک نقطه به نقطه دیگر منتقل کند، بدون اینکه شامل هرگونه منطق تجاری یا رفتاری باشد.

    ویژگی‌های اصلی DTO:

    1. ساده و بدون منطق: DTO فقط شامل فیلدها و متدهای getter و setter است و هیچ‌گونه عملیات یا منطق تجاری در آن وجود ندارد.
    2. انتقال داده بین لایه‌ها: معمولاً در معماری‌های چند لایه (مانند لایه‌های سرویس، کنترلر و پایگاه داده) برای انتقال داده بین این لایه‌ها استفاده می‌شود.
    3. تفکیک از مدل‌ها: برخلاف مدل‌ها (که ممکن است شامل منطق تجاری باشند)، DTO فقط برای حمل و نقل داده‌ها استفاده می‌شود.

    کاربردهای DTO:

    • ارسال داده‌ها بین سرور و کلاینت: در زمانی که داده‌ها باید به کلاینت فرستاده شوند (مانند JSON یا XML)، از DTO استفاده می‌شود تا داده‌های خالص بدون منطق به کلاینت انتقال یابد.
    • کاهش بار: DTO‌ها می‌توانند برای انتقال فقط داده‌های مورد نیاز استفاده شوند و به کاهش بار بر روی شبکه کمک کنند.

    مثال:

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

    class UserDTO {
        public $name;
        public $email;
    
        public function __construct($name, $email) {
            $this->name = $name;
            $this->email = $email;
        }
    }
    

    در اینجا، UserDTO فقط شامل داده‌های نام و ایمیل است و هیچ‌گونه منطق تجاری یا رفتار خاصی در آن وجود ندارد. این کلاس می‌تواند برای انتقال داده‌ها بین لایه‌ها یا به کلاینت استفاده شود.

  • سیمفونی (Symfony) از کدام الگوهای طراحی استفاده کرده است؟

    منبع: chatgpt

    Symfony از الگوهای طراحی متعددی در هسته‌ی خود استفاده می‌کند. برخی از مهم‌ترین آن‌ها عبارت‌اند از:

    ۱. Dependency Injection (تزریق وابستگی)

    • کاربرد: Symfony به شدت از تزریق وابستگی استفاده می‌کند. این الگو به مدیریت وابستگی‌های بین اشیاء کمک می‌کند و از سخت‌کدنویسی وابستگی‌ها جلوگیری می‌کند. Service Container در Symfony پیاده‌سازی تزریق وابستگی است.
    • کجا: استفاده از سرویس‌ها در کنترلرها و سایر بخش‌های برنامه.

    ۲. Observer (ناظر)

    • کاربرد: Symfony از الگوی ناظر برای پیاده‌سازی سیستم رویداد (Event Dispatcher) استفاده می‌کند. با این الگو، می‌توان به رویدادهای مختلف در برنامه واکنش نشان داد.
    • کجا: رویدادهای مختلف مانند درخواست HTTP یا پاسخ HTTP.

    ۳. Strategy (استراتژی)

    • کاربرد: این الگو در سیستم اعتبارسنجی (Validation) و مسیریابی (Routing) Symfony استفاده می‌شود. به این ترتیب امکان انتخاب رفتارهای مختلف بدون تغییر کد پایه وجود دارد.
    • کجا: انتخاب استراتژی‌های مختلف مسیریابی یا اعتبارسنجی.

    ۴. Factory (کارخانه)

    • کاربرد: Symfony برای تولید اشیاء مختلف مانند درخواست‌ها (Request)، پاسخ‌ها (Response)، و فرم‌ها (Form) از الگوی Factory استفاده می‌کند.
    • کجا: در بخش‌های مختلفی از برنامه که نیاز به ایجاد اشیاء متعدد با ساختار یکسان ولی پیاده‌سازی‌های مختلف وجود دارد.
  • لاراول (Laravel) از کدام الگوهای طراحی استفاده کرده است؟

    منبع: chatgpt

    Laravel نیز الگوهای طراحی متعددی را برای سهولت و انعطاف بیشتر در توسعه استفاده می‌کند. برخی از مهم‌ترین آن‌ها عبارت‌اند از:

    ۱. Facade (نما)

    • کاربرد: یکی از معروف‌ترین الگوهای مورد استفاده در Laravel، الگوی Facade است که به توسعه‌دهندگان اجازه می‌دهد به شیوه‌ای ساده به سرویس‌های مختلف دسترسی پیدا کنند. Facade یک رابط ساده برای استفاده از سرویس‌های پیچیده درون فریمورک فراهم می‌کند.
    • کجا: سرویس‌های اصلی مانند DB، Cache، Auth و غیره از طریق Facade در دسترس هستند.

    ۲. Service Provider (تأمین‌کننده خدمات)

    • کاربرد: Laravel از الگوی Service Provider برای مدیریت ثبت و بارگذاری وابستگی‌ها و سرویس‌ها استفاده می‌کند. این الگو مدیریت lifecycle سرویس‌ها را آسان‌تر می‌کند.
    • کجا: در فایل‌های ServiceProvider مانند AppServiceProvider که سرویس‌های مختلف را درون Container ثبت می‌کنند.

    ۳. Repository (مخزن)

    • کاربرد: الگوی Repository در Laravel به توسعه‌دهندگان کمک می‌کند که لایه دسترسی به داده‌ها را از منطق تجاری جدا کنند. اگرچه به‌طور پیش‌فرض پیاده‌سازی نشده است، بسیاری از توسعه‌دهندگان آن را برای ساختارمندی بهتر استفاده می‌کنند.
    • کجا: برای جداسازی منطق پایگاه داده از کنترلرها در لایه‌های Domain.

    ۴. Singleton (تک‌شیء)

    • کاربرد: Laravel از الگوی Singleton برای اطمینان از اینکه فقط یک نمونه از کلاس‌های خاص در طول اجرای برنامه ایجاد شود، استفاده می‌کند. به خصوص برای سرویس‌های سنگین یا آن‌هایی که نیاز به اشتراک‌گذاری حالت دارند.
    • کجا: کلاس‌هایی مانند Config یا App به عنوان Singleton در نظر گرفته می‌شوند.

    ۵. Observer (ناظر)

    • کاربرد: Laravel از الگوی Observer برای مدیریت تغییرات در مدل‌های Eloquent استفاده می‌کند. این الگو برای ثبت رفتارهایی مانند “قبل از ایجاد” یا “بعد از به‌روزرسانی” استفاده می‌شود.
    • کجا: برای مدیریت رویدادهای مدل‌های پایگاه داده.