*But why the letter "C"? Why not "A" or "B"? Why not "Z?"*
Неудивительно, ответ заключается в старых корнях DOS Microsoft. Задолго до того, как Windows существовал, самые совместимые с ПК компьютерные системы имели только один дисковод в нем - дисковод для гибких дисков. В то время пользователи вставили бы свой гибкий диск DOS в компьютер непосредственно перед тем, как они включили его, и компьютер запустится или "загрузится" с помощью программного обеспечения на дискете. Как первое и часто только дисковод, установленный в компьютере, гибкому диску присвоили первая буква алфавита.
да, это плохо.
Другой, даже более важный аспект, это то, что ваши компоненты привязаны к ваш локатор служб.
Теперь вы не можете создать их экземпляры просто так - вам нужен полностью настроить сервисный локатор в место каждый раз, когда вам нужно использовать компонент.
Самая главная причина, о которой я могу думать (не просто глядя на проблемы с локаторами сервисов в целом) в том, что это не то, что я, как пользователь вашего класса, ожидал бы .
Мета-обсуждение:
Некоторые структуры DI (например, Guice ) построят для вас фабрику .
Некоторые люди выступают за отделение «нового» от «инъекционного».
Я не совсем уверен в этом сильном ответе Кшиштофа «это плохо». Я думаю, что здесь есть некоторый компромисс и предпочтение, не категоризируя их как плохие или хорошие.
Я думаю, что использование локатора служб действительно скрывает ваши зависимости внутри класса, а не раскрывает их через конструкторы. И, на мой взгляд, это неудобно, потому что вы не узнаете, что в вашем классе чего-то не хватает, пока не будет вызван локатор служб, не настроенный.
Но DI не свободна от такой темноты кода. Когда вы используете DI, действительно не очевидно, как эти зависимости просто «появились» (магия DI) в вашем конструкторе. Используя SL, вы, по крайней мере, можете увидеть, откуда берутся эти зависимости.
Но все же, тестируя класс, который раскрывает эти зависимости на его конструкторах, вы (почти) не можете пропустить это. Это не тот случай, когда используется локатор сервисов.
Я не говорю, что Кшиштоф был неправ, потому что я полностью с ним согласен. Но я почти уверен, что использование сервисного локатора - не обязательно плохой «дизайн» и уж точно не просто плохой.
Phil
На самом деле не очевидно, как эти зависимости просто «появились» (магия DI) в вашем конструкторе. Используя SL, вы, по крайней мере, можете увидеть, откуда берутся эти зависимости.Но все же, тестируя класс, который раскрывает эти зависимости на его конструкторах, вы (почти) не можете пропустить это. Это не тот случай, когда используется локатор сервисов.
Я не говорю, что Кшиштоф был неправ, потому что я полностью с ним согласен. Но я почти уверен, что использование сервисного локатора - не обязательно плохой «дизайн» и уж точно не просто плохой.
Phil
На самом деле не очевидно, как эти зависимости просто «появились» (магия DI) в вашем конструкторе. Используя SL, вы, по крайней мере, можете увидеть, откуда берутся эти зависимости.Но все же, тестируя класс, который раскрывает эти зависимости на его конструкторах, вы (почти) не можете пропустить это. Это не тот случай, когда используется локатор сервисов.
Я не говорю, что Кшиштоф был неправ, потому что я полностью с ним согласен. Но я почти уверен, что использование сервисного локатора - не обязательно плохой «дизайн» и уж точно не просто плохой.
Phil
Это не тот случай, когда используется локатор сервисов.Я не говорю, что Кшиштоф был неправ, потому что я полностью с ним согласен. Но я почти уверен, что использование сервисного локатора - не обязательно плохой «дизайн» и уж точно не просто плохой.
Phil
Это не тот случай, когда используется локатор сервисов.Я не говорю, что Кшиштоф был неправ, потому что я полностью с ним согласен. Но я почти уверен, что использование сервисного локатора - не обязательно плохой «дизайн» и уж точно не просто плохой.
Phil