Внедрение зависимостей и разделение программных слоев - PullRequest
3 голосов
/ 28 мая 2010

Я пытаюсь внедрить Dependency Injection, чтобы мой тестер приложений был дружественным. У меня есть довольно основные сомнения.

Уровень данных использует объект SqlConnection для подключения к базе данных сервера SQL. Объект SqlConnection является зависимостью для уровня доступа к данным. В соответствии с законы внедрения зависимостей, мы должны не новые () зависимые объекты, а скорее принять их через аргументы конструктора. Не желая расстраивать DI богов, я покорно создайте конструктор в моем DAL, который принимает SqlConnection.

Бизнес-уровень вызывает DAL. Следовательно, бизнес-уровень должен перейти в SqlConnection. Уровень представления называется бизнес-уровнем. Следовательно это тоже должно перейти в SqlConnection на бизнес-уровень.

Это отлично подходит для изоляции классов и тестирования. Но мы не просто пара Уровни UI и Business для конкретной реализации уровня данных, который происходит использовать реляционную базу данных?

Почему уровни представления и бизнес-уровня должны знать, что основное хранилище данных такое SQL? Что делать, если приложение должно поддерживать несколько источников данных, кроме сервера SQL (например, файлы XML, файлы с разделителями-запятыми и т. д.) Кроме того, что если я добавлю другой объект? от которого зависит мой уровень данных (скажем, вторая база данных). Теперь я должен изменить верхние слои, чтобы передать в этот новый объект.

Как я могу избежать этой карусели и пожинать все преимущества DI без боли?

1 Ответ

3 голосов
/ 28 мая 2010

Честно говоря, вам нужно создать общий интерфейс для доступа к вашим данным. Репозиторий, а затем создать Sql-реализацию этого интерфейса и не внедрять SqlConnection.

Таким образом, при тестировании вы просто заменяете SqlImplementation общего интерфейса реализацией тестирования (макет) и начинаете.

Я думаю, вы слишком глубоко врезаетесь в DI. В случае реализации Sql вы, возможно, должны внедрить строку подключения, но не саму SqlConnection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...