Шаблон репозитория совпадает с моделью поставщика Asp.net?
-
05-07-2019 - |
Вопрос
Начиная с Asp.net 2.0 существует модель поставщика.Что касается деталей реализации, поставщик — это класс, производный от ProviderBase, который является абстрактным классом, а не интерфейсом, но в любом случае существует модель поставщика, так что мы можем иметь другую реализацию для замены, просто отредактировав web.config.Например, если вы создаете приложение для блога, у вас может быть BlogProvider:ProviderBase, то у вас могут быть реализации BlogProvider, например:SqlBlogProvider, OracleBlogProvider и даже MockBlogProvider для тестирования.
Теперь шаблон репозитория становится популярным, и я чувствую, что он должен удовлетворить ту же потребность, хотя в деталях реализации вы обычно используете интерфейсы, поэтому IBlogProvider, и вы вводите различные реализации через конструкторы, а не через свойства, но, по сути, я не Не вижу разницы в том, что нам дали эти два шаблона.
Лично я считаю, что модель провайдера более естественна для меня в реализации.Итак, есть ли между ними разница или это одно и то же, но разные названия дают разные сообщества?
Я бы признателен за любые комментарии по этому поводу, спасибо, Рэй.
Решение
Шаблоны Repository и Provider перекрываются, но формально они не описывают одно и то же.Я бы почти сказал, что репозиторий является подмножеством провайдера.На практике я думаю, что шаблон репозитория был вынесенный из конкретная потребность — абстрагирование репозиториев — и превратилась в сообществе в более общий шаблон абстракции.В этом отношении они стали разными терминами, описывающими одну и ту же концепцию.Однако от первоначальных определений они отличаются по объему:
Целью шаблона Repository является абстрагирование специфики репозиторий данных за пределами приложения.
Цель модели Provider — абстрагировать специфику что-либо вдали от приложения.Это может быть хранилище данных, но зачастую это и какая-то логика.
Например, в нашем приложении у нас есть ContextFactoryProvider, который содержит различные виды логики для определения того, какую ContextFactory использовать.В этом случае хранилища данных нет;это чисто логика приложения, которую необходимо произвольно изменять;Модель провайдера позволяет нам использовать Принцип единой ответственности изолировать каждый вид логики в отдельный класс и легко заменять эту логику.
Другие советы
Я не могу согласиться с Рексом М. Цель шаблона провайдера - предоставить поддержку для настройки через абстрактный интерфейс, тогда как целью шаблона репозитория является предоставление поддержки для абстрагирования деталей недопустимой базы данных. р>