دیزاین پترن
Facade یکی از الگوهای معماری نرمافزاری است که به انتزاع کردن یک رابط سادهتر برای دسترسی به ساب سیستم های پیچیدهتر کمک میکند. این الگو، واسطی سادهتر برای اجزای پیچیدهتر سیستم ایجاد میکند تا به کاربران اجازه دهد با سیستم برخورد کنند بدون اینکه جزئیات پیچیده را مد نظر قرار دهند.فرض کنید که شما یک برنامهی پرداخت آنلاین برای یک فروشگاه آنلاین طراحی میکنید. فرآیند پرداخت شامل چند مرحله پیچیدهتر مثل ارتباط با سرور بانک، بررسی اعتبار کارت، ذخیره تراکنشها و ... است. به جای اینکه کلیه جزئیات پیچیده این فرآیند را در هر جای برنامه تکرار کنید، از دیزان پترن
Facade استفاده میکنیم.مثال :
ابتدا یک کلاس
Facade برای فرآیند پرداخت ایجاد میکنیم که به عنوان واسط سادهتر با کاربران ارتباط برقرار میکند.class PaymentFacade {
private $paymentGateway;
private $transactionLogger;
public function __construct() {
$this->paymentGateway = new PaymentGateway();
$this->transactionLogger = new TransactionLogger();
}
public function processPayment($creditCard, $amount) {
// Communication with the bank server through PaymentGateway
$response = $this->paymentGateway->makePayment($creditCard, $amount);
// Register the transaction in the TransactionLogger
$this->transactionLogger->logTransaction($creditCard, $amount, $response);
return $response;
}
}
سپس برای هر یک از اجزای پیچیدهتر که در فرآیند پرداخت استفاده میشوند، یک کلاس را پیادهسازی میکنیم.class PaymentGateway {
public function makePayment($creditCard, $amount) {
// Connect to the bank server and make payment
return "Transaction Successful";
}
}
class TransactionLogger {
public function logTransaction($creditCard, $amount, $response) {
// Record the transaction in the database or log file
}
}
حالا میتوانیم در برنامهی خود از کلاس Facade استفاده کنیم و با استفاده از یک متد سادهتر فرآیند پرداخت را انجام دهیم.$paymentFacade = new PaymentFacade();Result:
$creditCard = '1234-5678-9012-3456';
$amount = 100;
$response = $paymentFacade->processPayment($creditCard, $amount);
echo $response;
Transaction Successful
در این مثال، با استفاده از الگوی طراحی
Facade، کار با فرآیند پرداخت به سادگی انجام میشود. تمام جزئیات پیچیدهتر مثل ارتباط با بانک و ثبت تراکنشها، در داخل کلاسهای جداگانه پنهان شده است. این کلاسها با هم ترکیب شدهاند تا یک رابط سادهتر را ارائه دهند که کاربر میتواند به راحتی از آن استفاده کند. این الگو مزیتهای افزودن اجزا و جداسازی اجزا را به برنامه میدهد..