Почему на одном контроллере введено хранилище, а на другом - служба
Я читаю книгу М. Зеемана "Внедрение зависимостей в.NET", глава 2. Исходный код доступен здесь: http://www.manning.com/seemann/
В решении ComplexCommerce, CommerceWebPresentationModel, HomeController у нас есть хранилище, переданное в конструктор:
public HomeController(ProductRepository repository, CurrencyProvider currencyProvider)
который затем передается вновь созданному сервису!
public ViewResult Index()
{
var currencyCode = this.CurrencyProfileService.GetCurrencyCode();
var currency = this.currencyProvider.GetCurrency(currencyCode);
var productService =
new ProductService(this.repository);
Однако в BasketController у нас есть сервис, переданный в конструктор, в который внедряется BasketRepository.
public BasketController(IBasketService basketService,
CurrencyProvider currencyProvider)
Насколько я вижу, ProductService не реализует никакого интерфейса, и это делает HomeController непроверенным.
У меня такие вопросы: почему ProductService создается без помощи DI? Я что-то пропустил? Или это то, что автор пропустил (в действительно хорошей книге иначе!)?
1 ответ
Надеемся, что эта дискуссия проливает свет на этот вопрос.
Короче говоря, это послужило примером, но не является одним из основных моментов книги. Как правило, я не пишу такой код специально в реальных производственных базах кода.
Однако я не согласен с этим HomeController
не тестируется, потому что я написал всю базу кода для книги, используя Test-Driven Development. Вы можете скачать код для книги и убедиться, что он покрыт тестами. Тем не менее, я согласен, что HomeController
модульное тестирование сложнее, чем могло бы быть.
Кстати, я делаю ошибки во время кодирования, как и все остальные...