💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ محمدرضا
دلیل ایجاد کلاس HttpClient برای کار با Guzzle
مهرداد سامی حل شده توسط مهرداد سامی

سلام

من داخل چند سورس کد هم این کار رو دیدم، مثلا:

<?php
namespace Doctrine\Tests;
use PHPUnit\Framework\TestCase;
/**
 * Base testcase class for all Doctrine testcases.
 */
abstract class DoctrineTestCase extends TestCase
{
}

در مثال بالا یک کلاس abstract تعریف شده که از TestCase ارث بری میکنه، حالا برای بقیه کلاس‌های تست این کلاس abstract را به ارث برده!، الکی یه کلاس خالی ایجاد کرده!

چه کاریه!؟، خب همون TestCase رو extends کنه.

این کار چه دلیلی داره؟ چه کمکی میتونه به ما بکنه؟

سلام

 

این کار وابستگی مستقیم نرم‌افزار شما به پکیج‌های بیرونی رو کمتر میکنه و باعث میشه که شما تسلط بیشتری روی نرم‌افزاری که درست میکنید داشته باشید. به عنوان مثال فرض کنید بعد از چند وقت API کلاس Guzzle تغییر میکنه و دیگه نباید به اون صورتی که ما داخل دوره از اون Object ساختیم این کار رو انجام بدیم، حالا باید بریم داخل تک تک فایل‌های تستمون و به صورت جدید از Guzzle نمونه سازی کنیم،‌ ولی اگر این رو داخل یک کلاس جداگانه مثل Httpclient انجام داده باشیم و از این کلاس داخل تست‌هامون استفاده کنیم فقط باید کلاس HttpClient رو تغییر بدیم. پس فقط تغییر در برنامه ما داخل یک کلاس اتفاق میوفته. به صورت کلی شما باید تا حد امکان وابستگی مستقیم نرم‌افزارتون رو به ابزار‌ها و یا پکیج‌هایی که دست شما نیست از بین ببرید و این یکی از روش‌های اینکار هستش.

دلایل دیگری هم داره مثلا همون کاری که ما داخل تست‌ها انجام دادیم .. اضافه کردن آدرس کانفیگ زمان نمونه سازی. با این کار دیگه نیازی نبود که داخل هرتست ما آدرس رو از کانفیگ مستقیما بگیریم. و در اصطلاحا یک Wrapper روی سرویس Guzzle با توجه به شرایط برنامه‌ خودمون درست کردیم.

 

برای اطلاعات بیشتر هم میتونید این لینک رو مطالعه کنید.

بهترین پاسخ
مهرداد سامی ۰۵ دی ۱۳۹۹، ۱۹:۵۶