Является ли использование дополнительных параметров для обратной совместимости хорошей идеей? - PullRequest
3 голосов
/ 22 сентября 2011

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

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

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

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

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

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

1 Ответ

5 голосов
/ 22 сентября 2011

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

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

...