Sobes.tech
Назад к вопросам
Junior — Middle
73

Чем отличаются паттерны Repository и Facade по своему назначению и реализации?

Ответ от нейросети

sobes.tech AI

Паттерны Repository и Facade решают разные задачи и отличаются по назначению и реализации:

  • Repository

    • Назначение: абстрагирует доступ к данным, предоставляя интерфейс для работы с коллекцией объектов (например, из базы данных).
    • Реализация: инкапсулирует логику выборки, добавления, обновления и удаления данных, скрывая детали хранения.
    • Пример: IRepository<T> с методами Add, Remove, Find и т.п.
  • Facade

    • Назначение: упрощает взаимодействие с комплексной подсистемой, предоставляя простой интерфейс.
    • Реализация: объединяет вызовы нескольких классов/подсистем в один метод или класс, скрывая сложность.
    • Пример: класс, который вызывает методы нескольких сервисов для выполнения одной бизнес-операции.

Итог: Repository фокусируется на управлении данными и их хранении, а Facade — на упрощении взаимодействия с набором сложных компонентов.

Пример кода на C#:

// Repository
public interface IRepository<T> {
    void Add(T item);
    void Remove(T item);
    T FindById(int id);
}

// Facade
public class OrderFacade {
    private InventoryService inventory;
    private PaymentService payment;
    private ShippingService shipping;

    public OrderFacade() {
        inventory = new InventoryService();
        payment = new PaymentService();
        shipping = new ShippingService();
    }

    public void PlaceOrder(Order order) {
        inventory.Reserve(order);
        payment.Charge(order);
        shipping.Schedule(order);
    }
}

Таким образом, паттерны служат разным целям и часто используются вместе для построения чистой архитектуры.