Если вы верите в эмпирическое правило "не издевайтесь над тем, что вам не принадлежит" , я не вижу, как вы могли бы заменить свои функциональные возможности ORM на макет или заглушку в своих тестах безРепозиторийоподобная абстракция.
Репозиторий - это очень важный шов - адаптер на языке шестиугольника - между вашим приложением и хранилищем.
И да, тот факт, что вам нужно было создать помощник для факторав некоторых случаях выборка данных является прекрасной иллюстрацией этой важности.
[Редактировать] Мысли о статьях "без репозиториев"
Как часто, большинство "хранилище"Обратная реакция "- это чрезмерная реакция на неправильное использование Репозитория и UoW, коренящихся в коллективной амнезии первоначальных причин, лежащих в основе шаблонов.
" Зачем скрывать совершенно хорошие рамки? " -EF нет!Например, IDbSet
, упомянутый в одной из статей, представляет собой ходячую дырявую абстракцию от самого имени до Attach()
для всех его методов расширения.Также см. Ниже неправильное использование и недопонимание таких методов, как Update()
, предоставляемых «совершенно хорошей структурой».
В отличие от этого, исходный шаблон Repository должен был быть минималистичной абстракцией, подобной коллекции из 3 методов, которую выне может пойти не так с.Add()
, Remove()
и несколько методов Get - все, что нам нужно, а не навороты целого фреймворка.
"Репозиторий не выполняет никакого тестированияпроще ": да, это так!Чем меньше контракт зависимости, тем легче рассуждать, тестировать, отлаживать.Aka KISS.
"1. Производительность - сортировка / фильтр: в старой (2013 г.) реализации Rep / UoW от Microsoft есть метод GetStudents, который возвращает IEnumerable. Это означает, что любойфильтрация или сортировка будут выполняться в программном обеспечении, что неэффективно. "
Серьезно?Лишенность учебного примера кода Microsoft, написанного много лет назад, является недостатком № 1 в целом шаблоне?Когда вам просто нужно создать метод внутри реализации репо, и он может быть оптимизирован настолько, насколько вам нужно!
Rep / UoW обновит сущность, используя EF Core 'Метод обновления - Говорит кто?Опять соломенный человек.Я использую эти шаблоны более 10 лет и никогда не нуждался в этом методе.SaveChanges () всегда был подходящим способом.
Очарование Rep / UoW исходит из того, что вы можете написать один универсальный репозиторий, а затем использовать его дляпостройте все свои под-репозитории
Абсолютно нет.Это не было частью первоначального шаблона и даже в значительной степени идентифицировалось как анти-шаблон в сообществе с первых дней принятия DDD.
"Вариант 2 - в стиле DDDклассы сущностей " ака классы домена, которые осуществляют доступ к данным ... что уничтожает постоянное невежество.Не очень хорошая идея IMO.
Я мог бы продолжать и рассказывать почти о каждом аргументе, но суть его такова:
Если вы собираетесьвините шаблон, делайте это в полном понимании его основ, а не потому, что вам не нравится какая-то испорченная реализация, которая была вставлена при копировании и загружена несколькими поколениями разработчиков до точки бесполезности.