Шаблон репозитория совпадает с моделью поставщика Asp.net?

StackOverflow https://stackoverflow.com/questions/623090

Вопрос

Начиная с Asp.net 2.0 существует модель поставщика.Что касается деталей реализации, поставщик — это класс, производный от ProviderBase, который является абстрактным классом, а не интерфейсом, но в любом случае существует модель поставщика, так что мы можем иметь другую реализацию для замены, просто отредактировав web.config.Например, если вы создаете приложение для блога, у вас может быть BlogProvider:ProviderBase, то у вас могут быть реализации BlogProvider, например:SqlBlogProvider, OracleBlogProvider и даже MockBlogProvider для тестирования.

Теперь шаблон репозитория становится популярным, и я чувствую, что он должен удовлетворить ту же потребность, хотя в деталях реализации вы обычно используете интерфейсы, поэтому IBlogProvider, и вы вводите различные реализации через конструкторы, а не через свойства, но, по сути, я не Не вижу разницы в том, что нам дали эти два шаблона.

Лично я считаю, что модель провайдера более естественна для меня в реализации.Итак, есть ли между ними разница или это одно и то же, но разные названия дают разные сообщества?

Я бы признателен за любые комментарии по этому поводу, спасибо, Рэй.

Это было полезно?

Решение

Шаблоны Repository и Provider перекрываются, но формально они не описывают одно и то же.Я бы почти сказал, что репозиторий является подмножеством провайдера.На практике я думаю, что шаблон репозитория был вынесенный из конкретная потребность — абстрагирование репозиториев — и превратилась в сообществе в более общий шаблон абстракции.В этом отношении они стали разными терминами, описывающими одну и ту же концепцию.Однако от первоначальных определений они отличаются по объему:

  • Целью шаблона Repository является абстрагирование специфики репозиторий данных за пределами приложения.

  • Цель модели Provider — абстрагировать специфику что-либо вдали от приложения.Это может быть хранилище данных, но зачастую это и какая-то логика.

Например, в нашем приложении у нас есть ContextFactoryProvider, который содержит различные виды логики для определения того, какую ContextFactory использовать.В этом случае хранилища данных нет;это чисто логика приложения, которую необходимо произвольно изменять;Модель провайдера позволяет нам использовать Принцип единой ответственности изолировать каждый вид логики в отдельный класс и легко заменять эту логику.

Другие советы

Я не могу согласиться с Рексом М. Цель шаблона провайдера - предоставить поддержку для настройки через абстрактный интерфейс, тогда как целью шаблона репозитория является предоставление поддержки для абстрагирования деталей недопустимой базы данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top