Внедрение зависимостей действительно решает множество проблем. Однако многие люди не видят, что это совокупность, а не композиция. В примере, где вы создаете экземпляр otherClass , у вас есть композиция. Поэтому, вводя зависимость зависимостью, вы действительно нарушаете и состав, и закон деметры и вводите агрегацию.
Я думаю, что внедрение зависимостей велико, если оно не нарушает архитектуру. Многие люди говорят, что использование оператора new в конструкторе плохо, и вместо этого экземпляр должен быть передан в конструктор, но они ошибаются. Это должно зависеть от домена. Есть ситуации, когда это может даже привести к путанице, особенно в языках без сборки мусора. Например, эмпирическое правило в C ++ гласит, что создатель уничтожает объект. Итак, если телефон с батареей разрушен, кто собирается уничтожить батарею? Телефон или какой-либо объект передал его в телефон? Но в некоторых ситуациях вы захотите передать батарею в телефон. Например, если вы моделируете фабрику.
Итак, чтобы ответить на ваш вопрос "Является ли композиция объектов без внедрения зависимостей плохой вещью?" - это зависит от предметной области, которую вы моделируете, жертвовать дизайном ради тестируемости - это плохо, ИМО. Если вы найдете что-то непроверенное, посмотрите, правильно ли ваш дизайн. Я обычно смотрю, смогу ли я ввести внедрение зависимости. Если это не может быть и речи, тогда я посмотрю, смогу ли я внедрить фабричные методы Если нет, тогда я посмотрю, смогу ли я сделать что-нибудь еще.