Re[20]: О пользе Dependency Injection
От: · Великобритания  
Дата: 19.01.21 11:34
Оценка:
Здравствуйте, takTak, Вы писали:

T>>>все разговоры в этой теме от банального непонимания, для чего придумали DI / IoC

T>·>Это верно.
T>·>А придумали контейнеры для сборки монструозных монолитных enterprise приложений из крупных отдельно поставляемых компонент, плагинной архитектуры, внутри так называемых application servers.
T> о чём ты вообще? идея юнит-тестирования намного старше веб-серверов...
"веб-сервер" я не говорил, не приписывай мне ложные высказывания.
Для юнит-тестирования контейнер не нужен тоже, чаще даже вреден. Нужен DI.

T>>>как ты с твоим этим кодом будешь писать код, который это проверяет?

T>·>var mainService = new MainService(new InMemoryProvider(), new Configuration(), new IdentityProvider(Thread.Current.Identity), new FileManager() , new EmailSerice(new SmtrAddress(25.145.789), etc.));
T>·>...

Ты предлагаешь посылать письма и писать файлы из тестов? Особенно весело бороться в тестах с многопоточкой. Нет, в тестахм добрая половина этих зависимостей будут тестовые реализации.

А для второй половины — если же ты хочешь потестировать интеграцию MainService с какими-то фиксированными зависимостями, которые так же используются и в реальном приложении тоже, просто делаешь классическую композицию и у тебя получается переиспользуемый модуль со своими зависимостями, например что-то типа такого:
class MainServiceModule
{
  MainService service;
   
  MainServiceModule(DbProvider dbProvider, EmailService emailService)
  {
     service = new MainService(dbProvider, configuration, new IdentityProvider(Thread.Current.Identity), new FileManager(), emailService);
  }
}


T>этот код показывает, что ты ни разу правильно не написал тестового кода с использованием DI, правильно было бы так:

Такой код я писал, конечно. Но с тех пор кое-чему научился.

T>>Container.Register<InMemoryProvider, DbProvider> ()

Это не DI, это контейнер. Разберись в конце-концов что такое DI.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.