Здравствуйте, IQuerist, Вы писали:
IQ>>>Что за ужосы??? Какие камменты? ServiceLocator.GetCurrentUserInfo
IQ>·>Я вот тут хорошее объяснение окнопал на пальцах и с картинками почему этот твой подход говно:
IQ>·>http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/
IQ>·>Ну и вывод совпадающий с моим: The compiler can offer both consumers and producers so much help when Constructor Injection is used, but none of that assistance is available for APIs that rely on Service Locator.
IQ>·>Собственно, прежде чем отвечать на предыдущий пост ознакомься с этой статьёй и пиши возражения по делу, если есть.
IQ>Нда... Как говорит народная мудрость лучше всего бандиты решают те проблемы которые сами и создают В посте Seemann создал инвалидное решение, огреб проблем и доблестно все порешал с помощью constructor injection! Какую же проблему он решил? А оказывается OrderProcessor.Process(Order order) внутри использует IOrderValidator!
Не только IOrderValidator, но и IOrderCollector, а потом со временем добавление IOrderShipper.
IQ>Но зачем явно передавать его в конкретный метод,
Потому что вызовов этого конкретного метода может быть много по всему коду, а вызововы конструктора обычно постоянны.
IQ>если можно где-то там, за ширмой неявно затаскивать его через конструктор в DI? Ведь достаточно будет посмотреть конструктор,
Зачем тебе его смотреть? Если у тебя есть ссылка на OrderProcessor — то ты смело можешь использовать любые его методы, т.к. объект уже сконструирован, компилятор гарантирует.
Если у тебя такой ссылки нет, то смотри wiring и найди добавь эту ссылку к себе. Если не получится — значит что-то у тебя не хвататет в зависимостях, протаскивай как надо куда надо, а не надейся на глобальные переменные.
IQ>и метод инициализации всех сервисов системы и все сразу станет понятно!
Что такое "метод инициализации всех сервисов системы"?
IQ>Не забывайте это делать при вызове каждого метода сервиса и пожалуйста отслеживайте все время изменения, которые вносят ваши коллеги. Кроме валидатора, в OrderProcessor.Process можно затащить много любопытных вещей, а вы, по api об этом даже не узнаете Это очень удобно.
Да, удобно. А ты предлагаешь всё затаскивать через параметры метода? А в месте вызова этого метода они откуда возьмутся? Из тумбочки?