الگوهای طراحی PHP: نمای از راه دور

الگوی طراحی نمای از راه دور
در نمای دور افتاده الگوی طراحی برای کاهش تعداد تماس های از راه دور بین مشتری و سرور استفاده می شود. این به عنوان یک نقطه ورودی واحد به زیر سیستم زیرین عمل می کند ، و روش های درشت دانه ای را ارائه می دهد که جمع آوری و مدیریت جزئیات عملیات پیچیده تر است. این الگوی با بسته بندی فرآیندهای پیچیده در یک رابط یکپارچه ، به حداقل رساندن مشکلات تأخیر ناشی از درخواست های مختلف شبکه کمک می کند.
در PHP ، نمای دور افتاده الگوی به ویژه در مواردی که سرور یک API یا خدمات وب را به مشتری ارائه می دهد ، مفید است.
چگونه کار می کند
- در شکل کلاس تعامل با زیر سیستم ها یا خدمات مختلف را ساده می کند.
- مشتری به جای چندین تماس ریز دانه ، یک تماس با نمای را انجام می دهد.
- نمای نمای با خدمات اساسی ، هرگونه پردازش داده لازم را انجام می دهد و پاسخ ساده تری را به مشتری باز می گرداند.
اجرای
بیایید تصور کنیم نمای دور افتاده این پیچیدگی تعامل با چندین سرویس دهنده را در دست گرفتن داده های کاربر ، سفارشات و موجودی در یک سیستم تجارت الکترونیکی پنهان می کند.
زیر سیستم ها: خدمات از راه دور ریز دانه
این خدمات واقعی هستند که عملیات خاصی را ارائه می دهند ، مانند جزئیات کاربر ، وضعیت سفارش و بررسی موجودی.
// UserService.php - Handles user-related details.
class UserService {
public function getUserInfo($userId) {
// Simulate fetching user data from a remote service.
return [
'id' => $userId,
'name' => 'John Doe',
'email' => 'john.doe@example.com',
];
}
}
// OrderService.php - Handles order-related details.
class OrderService {
public function getOrderDetails($orderId) {
// Simulate fetching order details.
return [
'orderId' => $orderId,
'status' => 'Shipped',
'totalAmount' => 150.75,
];
}
}
// InventoryService.php - Checks inventory levels.
class InventoryService {
public function checkProductStock($productId) {
// Simulate inventory stock check.
return [
'productId' => $productId,
'stockLevel' => 42,
];
}
}
نمای از راه دور: ساده سازی تعامل
این نمای تماس های این سرویس ها را جمع می کند و یک رابط ساده تر به مشتری ارائه می دهد.
// ECommerceFacade.php - The Remote Facade
class ECommerceFacade {
private $userService;
private $orderService;
private $inventoryService;
public function __construct() {
$this->userService = new UserService();
$this->orderService = new OrderService();
$this->inventoryService = new InventoryService();
}
// Simplified method that aggregates data from all services.
public function getUserDashboardData($userId, $orderId, $productId) {
$userInfo = $this->userService->getUserInfo($userId);
$orderDetails = $this->orderService->getOrderDetails($orderId);
$stockInfo = $this->inventoryService->checkProductStock($productId);
// Aggregating and returning a simplified response to the client.
return [
'user' => $userInfo,
'order' => $orderDetails,
'productStock' => $stockInfo,
];
}
}
کد مشتری: تعامل با نمای
مشتری فقط با نمای در تعامل است و نیازی به دانستن از پیچیدگی های زیر سیستم های اساسی ندارد.
// Client code
$facade = new ECommerceFacade();
$dashboardData = $facade->getUserDashboardData(1, 1001, 2001);
echo "User Information: \n";
print_r($dashboardData['user']);
echo "\nOrder Details: \n";
print_r($dashboardData['order']);
echo "\nProduct Stock Info: \n";
print_r($dashboardData['productStock']);
User Information:
Array
(
[id] => 1
[name] => John Doe
[email] => john.doe@example.com
)
Order Details:
Array
(
[orderId] => 1001
[status] => Shipped
[totalAmount] => 150.75
)
Product Stock Info:
Array
(
[productId] => 2001
[stockLevel] => 42
)
مزایای استفاده از نمای از راه دور
- کاهش تأخیر: به جای برقراری تماس از راه دور ، مشتری فقط یک تماس را به نمای انجام می دهد.
- رابط ساده: مشتریان نیازی به دانستن جزئیات خدمات اساسی ندارند.
- جدا سازی: تغییر در زیر سیستم های زیرین بر مشتری تأثیر نمی گذارد ، تا زمانی که رابط نمای سازگار باشد.
- قابلیت حفظ بهتر: منطق کسب و کار را می توان در داخل نمای جمع کرد و حفظ آن را آسانتر می کند.
چه موقع از نمای از راه دور استفاده کنید
- هنگامی که می خواهید تعداد تماس های از راه دور در سیستم های توزیع شده را به حداقل برسانید.
- هنگامی که شما نیاز به تهیه یک API یکپارچه و بالاتر برای پنهان کردن زیر سیستم های پیچیده دارید.
- هنگامی که زیر سیستم ها احتمالاً تغییر می کنند اما رابط مشتری باید پایدار بماند.