Шаблоны проектирования программного обеспечения предназначены для решения конкретных проблем в правильном контексте, и при неправильном использовании они приведут к дополнительным ненужным сложностям без предоставления каких-либо значений.
Итак, чтопроблемы, которые решает шаблон хранилища?
1- Минимизация логики повторяющихся запросов : в больших приложениях вы можете обнаружить много сложных запросов LINQ, дублированных в нескольких местах.Если это так, вы можете использовать шаблон хранилища для инкапсуляции этих запросов и минимизации дублирования.
2- Лучшее разделение интересов: Представьте себе сложный запрос для получения наиболее продаваемых курсов в данной категории, который включает в себя активную загрузку, объединение, группировку, фильтрацию и т. Д.
Когда вы реализуете такие большие сложные запросы в своих сервисах / контроллерах, вы получите толстые сервисы / контроллеры.Эти классы становятся сложными для модульного тестирования, так как они потребуют много шумных заглушек.Ваши юнит-тесты становятся длинными, жирными и не поддерживаемыми.
Если вы столкнулись с этой проблемой, возможно, вы могли бы подумать об использовании шаблона хранилища.В этом примере мы можем инкапсулировать сложный запрос, чтобы получить наиболее продаваемые курсы в репозитории:
courseRepository.GetTopSellingCourses(int categoryId, int count);
Таким образом, ваши службы / контроллер больше не будут иметь дело с быстрой загрузкой, объединением, группировкой и т. Д. Вместо этого, они делегируют в хранилище.Помните, что энергичная загрузка, объединение и группировка и т. Д. Являются запросом логики и относятся к вашему уровню доступа к данным, а не к вашим услугам или уровню представления.
3- Отделение архитектуры вашего приложения от сред постоянства: когда вы используете классы Entity Framework (например, DbContext, DbSet и т. Д.) Непосредственно в своем приложении, ваше приложение тесно связано с Entity Framework.Если вы планируете переключиться на другой O / RM в будущем или даже на более новую версию Entity Framework с другой моделью, вам, возможно, придется изменить многие части вашего приложения, и это может привести к новым ошибкам в вашем приложении.Вы можете использовать шаблон репозитория, чтобы отделить архитектуру вашего приложения от сред постоянства, таких как Entity Framework.Таким образом, у вас будет свобода перехода на другой O / RM с минимальным влиянием на ваше приложение.
Просмотрите это видео для получения более подробной информации:
https://youtu.be/rtXpYpZdOzM