Нет ничего неправильно со статическим контролем типов при использовании Haskell который имеет невероятную статическую систему типов. Однако, если Вы используете языки как Java и C++, которые имеют ужасно наносящие вред системы типов, утиный ввод является определенно улучшением.
Предполагают пытаться использовать что-то столь же простое как" карта " в Java (и не, я не имею в виду структура данных ). Даже дженерики скорее плохо поддерживаются.
Похоже, что шаблон репозитория является решением для всего ... Репозиторий - это не серебряная пуля!
Я использую шаблон репозитория с EF каждый день, потому что, когда я начинал свой текущий проект несколько месяцев назад, он выглядел как как рекомендуемое решение. Мои выводы:
IQueryable
. Linq-to-entity является лишь подмножеством Linq-to-objects, и mock не обрабатывает ссылочную целостность так много раз, что я видел зеленые модульные тесты и исключения во время выполнения. Правильный подход к тестированию с EF - это интеграционные тесты. Репозиторий Mocking предназначен только для тестирования реальной бизнес-логики, не связанной с доступом к данным. Если у вас нет интеграционного теста для доступа бизнес-метода или к сохранению данных, вы его не тестировали. Сам EF уже предлагает шаблон репозитория - DbSet
и ObjectSet
являются репозиториями, а DbContext
и ObjectContext
являются Единицей работ. Так что, по моему мнению, шаблон репозитория чрезмерно используется. Это может быть полезно в больших проектах, где вам нужно строгое разделение на слои или в случае добавления дополнительной логики к его методам. Использование репозитория только потому, что вы хотите обернуть доступ к EF, часто является бесполезным кодом и просто дополнительным уровнем сложности.
Таким же образом вы можете создавать повторно используемые методы, определяющие ваши запросы.
Если вы используете EF непосредственно в бизнес-методах (Службы уровня домена и Службы уровня приложения), то вы не изолируете Уровень модели домена от технологий инфраструктуры (в данном случае EF). Это один из принципов DDD. у вас, вероятно, должен быть один репозиторий на агрегат.
Для получения дополнительной информации о DDD см .:
Книга Эрика Эванса: http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215