Похоже, вы понимаете предмет довольно хорошо.Я согласен с вашим аргументом, что может быть реализация, которая не имеет зависимости, и поэтому лучше не связываться.Я обычно предпочитаю первый подход, как и вы, по той же причине и обычно поощряю этот выбор.
В общем, я бы сказал, что если зависимость - это деталь реализации, то она должна быть передана конструкторуконкретной реализации.Если параметр присущ самому определению / характеру вычислений, то лучше передать параметр.Другая ситуация, когда рекомендуется передать параметр в интерфейсе, - это мутация;для повторного входа лучше передать параметр, который вы изменяете, вместо изменения состояния реализации, поэтому, если ожидаются какие-либо побочные эффекты, я бы рекомендовал передать объект, который будет мутирован.Кроме того, я согласен с вашей точкой зрения.