Мое общее правило заключается в том, что если у объекта может быть изменено его состояние за пределами вашего класса, или вы хотите иметь возможность предоставлять альтернативную реализацию либо в ходе тестирования, либо в какой-то момент в будущем динамически, вы должны внедрить его.Если класс используется и изменяется только внутри, а реализация зависит только от содержащего класса, тогда создание зависимости внутри, вероятно, нормально.Чтобы использовать ваш пример, я бы вставил SerialPort
, но не List<int>
.
В качестве отступления, теперь, когда я делаю TDD (Test Driven Development), я обнаружил, что я действительно тоже не волнуюсьмного об этих решениях.Вы довольно быстро достигли той точки, когда вы знаете, какие классы нужно вводить, чтобы разделить ваши классы и упростить тестирование.Даже если вы сначала не поняли это правильно, в течение нескольких тестов вы обнаружите, что ваш код естественно развивается в этом направлении.