Я поддерживаю пару библиотек для других людей. После того, как я выполнил пару релизов для каждого из них, есть некоторые вещи, которые я бы сделал по-другому, если бы мне пришлось делать их снова.
Вопрос в том, должен ли я их закончить?
Я думаю, что мы все сталкиваемся с этой дилеммой - как сбалансировать полезность деятельности по обслуживанию и разрушительные последствия изменений.
Очевидно, что для ошибок, изменение является обязательным условием. Там нет дилеммы.
Для новых функций это вопрос полезности в сравнении с дополнительной сложностью. Я чувствую себя комфортно, имея дело с этим вопросом.
Это нечеткое пространство между исправлением ошибки и новой функцией, о которой я спрашиваю. Одним из примеров является обслуживание в соответствии с руководящими принципами проектирования каркаса или соблюдением CLS Для одной библиотеки я написал ее, не задумываясь о соответствии CLS, а затем люди попросили об этом. В результате мне пришлось изменить интерфейс, чтобы заменить uint на int. Это подрывное изменение, для небольшой выгоды (для большинства людей).
Еще одна проблема: соответствие FxCop. Мне пришлось внести изменения в имена параметров для некоторых методов, чтобы сделать FxCop счастливым. Но эти изменения действительно влияют только на людей, использующих рефлексию - типы не меняются, только названия параметров.
Проблема, с которой я сейчас сталкиваюсь, это: рекомендации по проектированию фреймворка. В рекомендациях, касающихся событий, говорится, что события должны иметь подпись с двумя аргументами: (Источник объекта, EventArgs e). Но я отсутствовал в тот день в моем курсе Framework Design;). События в моей библиотеке в настоящее время принимают только один аргумент EventArgs.
Сейчас я добавляю новые события в библиотеку.
Должны ли новые события соответствовать рекомендациям по проектированию рамок? или шаблон уже установлен в библиотеке?
Если я использую рекомендации по проектированию для новых событий, должен ли я изменить существующие события, чтобы они также соответствовали рекомендациям по проектированию?
И если так, как сделать миграцию? Должен ли я использовать атрибут [Устаревший]? Сколько релизов?
В более общем плане, меня интересуют мысли об обслуживании в этой нечеткой области между исправлением ошибки и новой функцией.