Внедрение зависимостей и веб-сервисы (особенно WCF) - PullRequest
0 голосов
/ 22 февраля 2011

Я провел много исследований по внедрению зависимостей и поиску сервисов (и сравнивал их).Я определенно вижу преимущества внедрения зависимостей, особенно в том, что касается разработки через тестирование.Хотя в настоящее время мы не практикуем разработку через тестирование, я бы хотел начать внедрять ее в своей команде разработчиков.Однако требуется, чтобы почти все вызовы нашей базы данных проходили через веб-сервис.Мы чаще используем сервисы WCF, чем традиционные веб-сервисы для новых проектов разработки.Что я пытаюсь понять, так это идея внедрения зависимости Dataprovider в наш веб-сервис.

Мне не совсем понятно, должен ли клиент сообщать службе, откуда получать данные.Является ли «приемлемым» просто иметь тесную связь службы WCF с поставщиком данных?Это, кажется, разрушает фундаментальную идею модульного тестирования без внешних зависимостей.Буду признателен за любую обратную связь по этому вопросу.

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

В зависимости от сложности вашего сценария, вы можете захотеть создать разделительный слой для приложения-службы WCF, и именно здесь использование Inversion of Control может иметь смысл.

Клиент, очевидно, не должен знать, а тем более сообщать службе, какого поставщика данных использовать. Решать это должна ваша служба WCF. Вы можете использовать либо локатор службы внутри конструктора класса WCF, либо внедрить необходимую службу, используя IInstanceProvider или ServiceHostFactory .

Оттуда вам решать, какие сервисы использует ваше приложение WCF.

Одним из распространенных решений является абстрагирование устойчивости данных с использованием шаблона Repository , что имеет смысл, особенно если ваша служба WCF содержит какую-либо существенную бизнес-логику. В этом типе сценария вы создадите классы репозитория, которые выполняют всю специфичную для поставщика данных логику. Затем эти классы могут быть издеваны или заглушены, чтобы включить модульное тестирование сервисов.

В других случаях, особенно когда ваши службы WCF предоставляют операции CRUD практически без бизнес-логики, я считаю, что создание дополнительного уровня между конечными точками службы и базой данных не имеет смысла. В конечном счете, в какой-то момент часть части вашей программы должна знать о базе данных. Использование DI / SL / IoC не должно быть самоцелью.

0 голосов
/ 22 февраля 2011

Клиент не будет определять, откуда поступают данные. Все внедрения зависимостей будут происходить на сервере.

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