Что такое шаблон проектирования фасада?

Что такое шаблон проектирования фасада?

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 Также опубликовано здесь


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE