Вопрос проверяет понимание принципов разделения ответственности и абстракции доступа к данным в архитектуре приложений.
Репозиторий — это прослойка между бизнес-логикой и хранилищем данных. Его основная цель — абстрагировать детали доступа к данным и предоставить коллекцию объектов, с которыми можно работать как с обычной коллекцией в памяти.
// Интерфейс репозитория (абстракция)
interface UserRepository {
findById(id: string): Promise<User | null>;
save(user: User): Promise<void>;
}
// Реализация для PostgreSQL
class PostgresUserRepository implements UserRepository {
async findById(id: string): Promise<User | null> {
const result = await db.query('SELECT * FROM users WHERE id = $1', [id]);
return result.rows[0] || null;
}
}
// Бизнес-логика (сервис) не знает о БД
class UserService {
constructor(private repo: UserRepository) {}
async updateEmail(userId: string, newEmail: string) {
const user = await this.repo.findById(userId);
if (!user) throw new Error('User not found');
user.email = newEmail;
await this.repo.save(user);
}
}Репозиторий незаменим в больших проектах с несколькими источниками данных, при необходимости писать юнит-тесты без подключения к БД, а также при использовании DDD (Domain-Driven Design), где репозиторий является частью модели предметной области.
Вывод: Выделение слоя репозитория — это инвестиция в поддерживаемость и тестируемость кода. Даже если сейчас у вас одна база данных, абстракция окупается при первом же рефакторинге или добавлении нового источника данных.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Golang Developer в телеграм