Може хтось, будь ласка, пояснить мені шаблон сховища в .NET, крок за кроком, наводячи дуже простий приклад або демонстрацію.
Я знаю, що це дуже поширене питання, але поки що я не знайшов задовільної відповіді.
Може хтось, будь ласка, пояснить мені шаблон сховища в .NET, крок за кроком, наводячи дуже простий приклад або демонстрацію.
Я знаю, що це дуже поширене питання, але поки що я не знайшов задовільної відповіді.
Відповіді:
Як підсумок, я б описав ширший вплив структури сховища. Це дозволяє всім вашим кодом використовувати об'єкти, не знаючи, як об’єкти зберігаються. Усі знання про наполегливість, включаючи картографування від таблиць до об'єктів, безпечно містяться у сховищі.
Дуже часто ви знайдете SQL-запити, розкидані в кодовій базі, і коли ви приїдете додати стовпець до таблиці, вам доведеться шукати файли коду, щоб спробувати знайти звички таблиці. Вплив змін є далекосяжним.
За допомогою шаблону репозиторію вам потрібно буде змінити лише один об'єкт і одне сховище. Вплив дуже малий.
Можливо, це допоможе подумати над тим, чому б ви використовували шаблон сховища. Ось кілька причин:
У вас є єдине місце для внесення змін у доступ до ваших даних
У вас є одне місце, відповідальне за набір таблиць (як правило)
Замінити сховище на підроблену реалізацію для тестування легко - тому вам не потрібно мати доступну базу даних для ваших тестових модулів.
Є й інші переваги, наприклад, якщо ви використовували MySQL і хотіли перейти на SQL Server - але я ніколи цього не бачив на практиці!
IConnection
та ICommand
ін. Частина, яка приховує тип бази даних. Зазвичай сховище більш орієнтоване на домен.
Це хороший приклад: Приклад шаблону сховища в C #
В основному, сховище приховує деталі того, як саме дані збираються / зберігаються з / до бази даних. Під обкладинками:
IDbContext
) або безпосередньо в nhibernate ( ISession
). Правильно реалізований репозиторій відбирає ВСІ специфічні відомості щодо стійкості (наприклад, як працює поточний постачальник Linq To Sql). тобто ніколи не піддавати IQueryable
.
IQueryable
- це не конкретна інформація щодо стійкості. Резервне копіювання IQueryable може бути таким же простим, як і жорстко закодований масив, або це може бути з файлу XML, веб-служби, бази даних, плоского файлу тощо. Я б не рекомендував сховище, яке не піддавало IQueryable, як завжди призводить до повільного доступу до даних у будь-якому випадку, коли викриття IQueryable дозволить деяким екземплярам покращити продуктивність, де це можливо, якщо збереження зберігає цю можливість. Крім того, приховування DbContext дозволяє вам перейти на інший ORM, якщо це потрібно (або немає ORM!)
IN
пропозиції sql, не знаючи, як це робить конкретний постачальник LinqToSql.