Что такое шаблон проектирования фасада?
1 марта 2023 г.По мере увеличения размера и сложности приложений управление взаимозависимостью между подсистемами может стать сложной задачей. Шаблон оформления фасада упрощает это взаимодействие и предоставляет унифицированный интерфейс для набора интерфейсов в подсистеме.
Случай использования
Рассмотрите приложение для онлайн-покупок, которое позволяет покупателям просматривать товары, добавлять их в корзину и оформлять заказ. Приложение имеет различные подсистемы, отвечающие за управление другими частями, такими как системы инвентаризации, оплаты и доставки. Эти подсистемы имеют разные интерфейсы и должны взаимодействовать друг с другом для совершения покупки.
Проблема в том, что управление этой связью между подсистемами может быть затруднено по мере роста приложения. Изменения в одной подсистеме могут иметь каскадный эффект на другие подсистемы, что приводит к запутанной и сложной в обслуживании кодовой базе.
Мы можем использовать шаблон проектирования фасада, чтобы упростить взаимодействие между подсистемами. Шаблон фасада обеспечивает единую точку входа в подсистему, скрывая ее сложность от клиента. В нашем примере мы можем создать фасад, предоставляющий унифицированный интерфейс для подсистем инвентаризации, оплаты и доставки.
Предпосылки
- Базовые знания концепций ООП.
- Любое знание языков программирования.
В статье демонстрируются шаблоны проектирования Facade с использованием языка программирования C#.
Цели обучения
- Как писать код с использованием шаблона проектирования Facade
Начало работы
Начнем с определения интерфейсов для наших подсистем
public interface IInventorySystem
{
void Update(int productId, int quantity);
bool IsAvailable(int productId, int quantity);
}
public interface IPaymentSystem
{
bool Charge(double amount);
}
public interface IShippingSystem
{
bool Ship(string address);
}
Далее мы можем реализовать подсистемы:
public class InventorySystem : IInventorySystem
{
public void Update(int productId, int quantity)
{
// update inventory
}
public bool IsAvailable(int productId, int quantity)
{
// check if inventory is available
return true;
}
}
public class PaymentSystem : IPaymentSystem
{
public bool Charge(double amount)
{
// charge the customer
return true;
}
}
public class ShippingSystem : IShippingSystem
{
public bool Ship(string address)
{
// ship the product
return true;
}
}
Наконец, мы можем создать фасад, обеспечивающий простой интерфейс для этих подсистем:
public class OrderFacade
{
private IInventorySystem _inventorySystem;
private IPaymentSystem _paymentSystem;
private IShippingSystem _shippingSystem;
public OrderFacade()
{
_inventorySystem = new InventorySystem();
_paymentSystem = new PaymentSystem();
_shippingSystem = new ShippingSystem();
}
public bool PlaceOrder(int productId, int quantity, double amount, string address)
{
bool success = true;
if (_inventorySystem.IsAvailable(productId, quantity))
{
_inventorySystem.Update(productId, -quantity);
success = success && _paymentSystem.Charge(amount);
success = success && _shippingSystem.Ship(address);
}
else
{
success = false;
}
return success;
}
}
В классе OrderFacade
мы создаем экземпляры подсистем и предлагаем простой метод PlaceOrder
, который принимает идентификатор продукта, количество, сумму и адрес доставки. Метод PlaceOrder
использует подсистемы для проверки запасов, выставления счетов покупателю и отправки товара.
С шаблоном фасада клиентский код может создать экземпляр класса OrderFacade
и вызвать метод PlaceOrder
, не беспокоясь о деталях подсистем.
var order = new OrderFacade();
bool success;
// place an order
success = order.PlaceOrder(productId: 123, quantity: 1, amount: 99.99, address: "123 Main St");
if (success)
{
Console.WriteLine("Order placed successfully");
}
else
{
Console.WriteLine("Unable to place order");
}
В этом примере мы использовали шаблон фасада, чтобы упростить взаимодействие между подсистемами в приложении для онлайн-покупок. Код клиента должен взаимодействовать только с классом `OrderFacade`, и ему не нужно знать о подсистемах инвентаризации, оплаты и доставки.
Заключение
Шаблон проектирования фасада упрощает взаимодействие между подсистемами и предоставляет унифицированный интерфейс для набора интерфейсов в подсистеме. Это может помочь уменьшить связанность и улучшить ремонтопригодность больших и сложных приложений. В этой статье рассматривается шаблон проектирования фасадов на C# с примерами использования и примерами кода. Используя шаблон фасада, мы можем упростить кодовую базу и упростить ее поддержку и расширение.
Спасибо за прочтение, и я надеюсь, что вам понравилась статья. Оставьте свой отзыв в разделе комментариев.
Подпишитесь на меня
Публикация C#, Dev. в, Pinterest, Подстек, Hashnode, Write.as< /а>
Другие шаблоны проектирования — Ссылка на обучение Linkedin
n Также опубликовано здесь
Оригинал