Является ли использование необязательных параметров для обратной совместимости хорошей идеей?

Мне было интересно обеспечить обратную совместимость с помощью необязательных параметров.

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

Теперь мне нужно передать true везде, где в моем текущем коде я вызывал эту функцию раньше. Вот почему я подумал: «Хорошо, я просто поставил true в качестве значения логического значения по умолчанию. Тогда мне нужно передать false только в нескольких новых местах, где мне нужно новое поведение».

Однако я чувствую, что моя мотивация сделать интерфейс таким образом заключается в том, чтобы теперь меньше писать код. Обычно, когда это единственная мотивация, я думаю, что это кратчайший путь, который, вероятно, укусит меня позже. Я не могу придумать ничего, что позже вызовет проблемы, поэтому я публикую этот вопрос здесь.

Рядом с моей ситуацией, как я описал выше, это хорошая идея вообще сделать новый параметр необязательным для обратной совместимости (например, в интерфейсах, которые используются третьими сторонами)?

Заранее спасибо.


person Matthijs Wessels    schedule 22.09.2011    source источник


Ответы (1)


У меня есть веская причина против того, что значения по умолчанию для необязательных параметров используются только во время компиляции (за исключением случаев использования динамического ключевого слова).

Поэтому, если ваша третья сторона пытается использовать новую версию без перекомпиляции своего кода (например, пометив вашу библиотеку как зависимость в nuget), она будет несовместима, поскольку подпись имеет дополнительный параметр.

person jbtule    schedule 22.09.2011
comment
Это хороший момент. Я думаю, в этом случае перегрузка была бы лучше. Но это не значит, что позже мой код станет немного запутанным. - person Matthijs Wessels; 22.09.2011