Бекенд на C# Web Api
Паттерн Repository
Паттерн Repository позволяет изолировать логику доступа к данным от бизнес-логики приложения. Сервисы не будут зависеть напрямую от базы данных. Вместо этого они будут зависеть от абстракции. Это упрощает юнит тестирование и делает код более структурированным и гибким. Благодаря этому можно легко перейти на другую БД без изменения бизнес-логики. Этот паттерн часто используется в приложениях, где требуется более сложное взаимодействие с данными, и помогает упростить структуру кода.
В простом случае контроллеры (или лучше сервисы) имеют прямую связь со слоем Data Access. В нашем случае в качестве Data Access может выступать экземпляр DbContext. В таком случае мы имеем жесткую связь с конкретным фреймворком БД и сложно будет его изменить или внедрить другую реализацию БД. Также сложно будет писать юнит тесты, из-за сложности создания mock объектов.

С использованием паттерна Repository появляется дополнительная абстракция, которая изолирует все детали работы с конкретным фреймворком или конкретной БД. Благодаря этой абстракции также легко создавать mock объекты для тестирования. В коде бизнес-логики не будет прямых запросов к БД, и в целом не будет контекста работы с БД. Дополнительная абстракция позволяет перевести весь "низкоуровневый" язык работы с БД на высокоуровневый предметный язык.

Реализация паттерна Repository
В демо-проекте в качестве демонстрации реализован паттерн Repository. Детали реализации можете посмотреть по ссылке.
Manh Phan — Reposiroty pattern
Code Maze — ASP.NET Core Web API – Repository Pattern
Автор документа: Артём Ветик