Первый сценарий «плохой», потому что он затрудняет обмен тем, что называется B()
.
Второй сценарий, возможно, не совсем «плохой», потому что, в зависимости от того, как вы получите свой экземпляр класса, которому принадлежит C()
, вы можете заменить этот объект на другой (скажем, подкласс).
Третий сценарий, как правило, «лучший», поскольку он позволяет вам легче изменить реализацию A()
, но это верно только в том случае, если нет жестко закодированной конструкции конкретного класса, обеспечивающей A()
(то есть только Tru если внедрение зависимости фактически используется ).