Может кто-нибудь, пожалуйста, объясните мне Шаблон репозитория в .NET, шаг за шагом приводя очень простой пример или демонстрацию.
Я знаю, что это очень распространенный вопрос, но до сих пор я не нашел удовлетворительного ответа.
c#
asp.net
design-patterns
repository
Са Патил
источник
источник
Ответы:
В качестве резюме, я бы описал более широкое влияние шаблона хранилища. Это позволяет всему вашему коду использовать объекты без необходимости знать, как эти объекты сохраняются. Все знания о постоянстве, включая сопоставление таблиц и объектов, безопасно хранятся в хранилище.
Очень часто вы обнаруживаете, что SQL-запросы разбросаны по базе кода, и когда вы добавляете столбец в таблицу, вам приходится искать файлы кода, чтобы попытаться найти использование таблицы. Влияние изменений имеет далеко идущие последствия.
При использовании шаблона репозитория вам нужно будет изменить только один объект и один репозиторий. Воздействие очень мало.
Возможно, это поможет подумать, почему вы используете шаблон хранилища. Вот несколько причин:
У вас есть единственное место для внесения изменений в ваш доступ к данным
У вас есть одно место, ответственное за набор столов (обычно)
Репозиторий легко заменить на поддельную реализацию для тестирования, поэтому вам не нужно иметь базу данных, доступную для ваших модульных тестов.
Есть и другие преимущества, например, если вы использовали MySQL и хотели перейти на SQL Server - но я никогда не видел это на практике!
источник
IConnection
,ICommand
etc, которая скрывает тип базы данных. Хранилище обычно больше ориентировано на домен.Это хороший пример: Пример шаблона репозитория в C #
По сути, хранилище скрывает детали того, как именно данные извлекаются / сохраняются из / в базу данных. Под одеялом:
источник
IDbContext
) илиISession
напрямую в nhibernate ( ). Правильно реализованный репозиторий абстрагирует ВСЕ данные, специфичные для персистентности (например, как работает текущий поставщик Linq To Sql). т.е. никогда не подвергатьIQueryable
.IQueryable
не является информацией о персистентности. Поддержка IQueryable может быть такой же простой, как жестко заданный массив, или может быть из файла XML, веб-службы, базы данных, плоского файла и т. Д. Я бы не рекомендовал репозиторий, который не предоставляет IQueryable, как всегда приводит к медленному доступу к данным в каждом случае, где предоставление IQueryable позволит некоторым экземплярам повышать производительность, где это применимо, если хранилище постоянных данных имеет такую возможность. Кроме того, скрытие DbContext позволяет вам переключаться на другой ORM, если это необходимо (или без ORM!)IN
sql, не зная, как это делает конкретный поставщик LinqToSql.