Professional Documents
Culture Documents
Презентация 5. Архитектура Веб-приложений.структурные Шаблоны
Презентация 5. Архитектура Веб-приложений.структурные Шаблоны
Урок 5.
Структурные шаблоны
На уроке разберём
$newsPage->render();
}
Когда стоит применять
Предоставляет унифицированный
интерфейс вместо набора
интерфейсов подсистемы. Фасад
определяет интерфейс более
высокого уровня, который
упрощает использование
подсистемы.
UML-диаграмма
У этого шаблона нет чёткой реализации.
Главная цель Фасада
Этапы:
● рассчитать стоимость товаров;
● рассчитать скидку;
● деактивировать промокод (если он использовался);
● зарезервировать товары на складе, сформировать заказ;
● отправить письмо с подтверждением пользователю.
class Order
{
public function getUser(): User { echo 'Получаю данные по пользователю'; }
public function getAddress(): string { echo 'Получаю адрес доставки'; }
public function getItems(): array { echo 'Получаю все позиции в заказе'; }
public function getTotalPrice(): float { echo 'Получаю суммарную стоимость заказа'; }
public function assertCheck(): void { echo 'Проверяю корректность всех данных заказа'; }
}
class Delivery
{
public function getDeliveryPrice(string $address): float { echo 'Получаю стоимость доставки'; }
}
class Warehouse
{
public function holdItem(Item $item): void { echo 'Замораживаю деньги по карте пользователя'; }
}
class Mailer
{
public function sendMail(User $to): bool { echo 'Отправляю письмо пользователю'; }
}
class OrderFacade
{
private $order;
private $delivery;
private $promocode;
private $warehouse;
private $mailer;
public function __construct(Order $order, Delivery $delivery, Warehouse $warehouse, Mailer $mailer)
{
$this->order = $order;
$this->delivery = $delivery;
$this->warehouse = $warehouse;
$this->mailer = $mailer;
}
public function setPromocode(Promocode $promocode)
{
$this->promocode = $promocode;
}
public function checkout()
{
$total = $this->order->getTotalPrice();
$total += $this->delivery->getPrice($this->order->getAddress());
foreach ($this->order->getItems() as $item) {
$this->warehouse->holdItem($item);
}
$check = $this->order->assertCheck();
$this->mailer->sendMail($this->order->getUser()); } }
Когда стоит применять
return $area;
}
}
class SquareAreaLib
{
public function getSquareArea(int $diagonal)
{
$area = ($diagonal**2)/2;
return $area;
}
}
Задание:
Имеющиеся интерфейсы:
<?php
interface ISquare
{
function squareArea(int $sideSquare);
}
interface ICircle
{
function circleArea(int $circumference);
}