فساد (Facade) هم نام یک دیزاین پترن ساختاری است و هم نام یک قابلیت مشهور در فریمورک لاراول. این دو از نظر ایده ارائه یک رابط ساده به هم نزدیکاند، اما پیادهسازی آنها یکسان نیست. در متون لاراولی فارسی، در این واژهنامه از معادل رایج موردنظر نویسنده یعنی «فساد» استفاده میکنیم.
فساد در Laravel
در لاراول، فراخوانی Cache::get() یا Log::info() ظاهری شبیه متد استاتیک دارد، اما فساد لاراول درخواست را به سرویس ثبتشده در Service Container هدایت میکند. این قابلیت بهمعنی تعریف یک متد استاتیک معمولی نیست.
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
Cache::put('product:12', $product, 300);
Log::info('Product cache refreshed', ['id' => 12]);
فساد بهعنوان دیزاین پترن
در طراحی فروشگاه، یک سرویس Checkout میتواند پشت یک رابط عمومی، مراحل رزرو موجودی، پرداخت و ایجاد سفارش را هماهنگ کند. کنترلر فقط متد checkout() را میبیند و مجبور نیست همه جزئیات زیرسیستم را بداند.
final class CheckoutFacade {
public function __construct(
private InventoryService $inventory,
private PaymentService $payments
) {}
public function checkout(Cart $cart): Receipt {
$this->inventory->reserve($cart);
return $this->payments->charge($cart);
}
}
class CheckoutFacade:
def __init__(self, inventory, payments):
self.inventory = inventory
self.payments = payments
def checkout(self, cart):
self.inventory.reserve(cart)
return self.payments.charge(cart)
تفاوت مهم
دیزاین پترن فساد برای ساده کردن تعامل با چند زیرسیستم طراحی میشود. فساد لاراول یک API راحت برای دسترسی به سرویسهای Container است. این دو مفهوم را نباید کاملا یکسان دانست.
اطلاعات بیشتر را در دیزاین پترن فساد، فساد بلادرنگ و مقاله دیزاین پترن باورژن ببینید.