Бекенд на C# Web Api

To Kaiten

Паттерн Repository

Паттерн Repository позволяет изолировать логику доступа к данным от бизнес-логики приложения. Сервисы не будут зависеть напрямую от базы данных. Вместо этого они будут зависеть от абстракции. Это упрощает юнит тестирование и делает код более структурированным и гибким. Благодаря этому можно легко перейти на другую БД без изменения бизнес-логики. Этот паттерн часто используется в приложениях, где требуется более сложное взаимодействие с данными, и помогает упростить структуру кода.

Гибкость паттерна Repository может привести к усложнению кода из-за необходимости создания дополнительных интерфейсов и классов, что может сделать проект более сложным для понимания и поддержки. Для маленьких приложений, где объем работы с данными минимален, использование этого паттерна может оказаться излишним, так как простые CRUD операции можно реализовать без дополнительной абстракции (сервисы могут напрямую обращаться к DbContext).

Без паттерна Repository

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

С использованием паттерна Repository

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

Реализация паттерна Repository

В демо-проекте в качестве демонстрации реализован паттерн Repository. Детали реализации можете посмотреть по ссылке.


Ссылки

Manh Phan — Reposiroty pattern

Code Maze — ASP.NET Core Web API – Repository Pattern


Автор документа: Артём Ветик