Я пытаюсь внедрить Dependency Injection, чтобы мой тестер приложений был дружественным.
У меня есть довольно основные сомнения.
Уровень данных использует объект SqlConnection для подключения к базе данных сервера SQL.
Объект SqlConnection является зависимостью для уровня доступа к данным. В соответствии с
законы внедрения зависимостей, мы должны не новые () зависимые объекты, а скорее
принять их через аргументы конструктора. Не желая расстраивать DI богов, я
покорно создайте конструктор в моем DAL, который принимает SqlConnection.
Бизнес-уровень вызывает DAL. Следовательно, бизнес-уровень должен перейти в SqlConnection.
Уровень представления называется бизнес-уровнем. Следовательно это тоже должно перейти в SqlConnection
на бизнес-уровень.
Это отлично подходит для изоляции классов и тестирования. Но мы не просто пара
Уровни UI и Business для конкретной реализации уровня данных, который происходит
использовать реляционную базу данных?
Почему уровни представления и бизнес-уровня должны знать, что основное хранилище данных
такое SQL? Что делать, если приложение должно поддерживать несколько источников данных, кроме сервера SQL
(например, файлы XML, файлы с разделителями-запятыми и т. д.) Кроме того, что если я добавлю другой объект?
от которого зависит мой уровень данных (скажем, вторая база данных). Теперь я должен
изменить верхние слои, чтобы передать в этот новый объект.
Как я могу избежать этой карусели и пожинать все преимущества DI без боли?