Проверяет понимание паттерна Repository, его назначения и преимуществ при работе с данными в приложениях.
Repository — это паттерн проектирования, который абстрагирует доступ к данным, скрывая детали реализации хранилища (база данных, API, файловая система). Он предоставляет коллекцию методов для работы с сущностями, например, findById, save, delete, не раскрывая, как именно данные хранятся и извлекаются.
Основная цель — разделить бизнес-логику и инфраструктуру. Без Repository код напрямую обращается к ORM или SQL-запросам, что приводит к дублированию, сложности тестирования и жесткой связанности. Repository позволяет:
interface UserRepository {
findById(id: number): Promise<User | null>;
save(user: User): Promise<void>;
}
class PostgresUserRepository implements UserRepository {
async findById(id: number) {
// SQL запрос к БД
}
async save(user: User) {
// INSERT или UPDATE
}
}
class UserService {
constructor(private repo: UserRepository) {}
async getUser(id: number) {
return this.repo.findById(id);
}
}Repository полезен в средних и крупных приложениях, где есть сложная доменная модель и несколько источников данных. Для простых CRUD-приложений он может быть избыточен, но в целом улучшает архитектуру и тестируемость.
Итог: Repository — это мощный инструмент для управления доступом к данным, который повышает гибкость и чистоту кода. Используйте его, когда хотите отделить бизнес-логику от инфраструктуры и облегчить поддержку проекта.