Back to questions
Junior — Middle
71
Чем отличаются паттерны Repository и Facade по своему назначению и реализации?
Answer from AI
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);
}
}
Таким образом, паттерны служат разным целям и часто используются вместе для построения чистой архитектуры.