我为其他人维护了几个库。在为他们每个人完成了几个版本之后,如果我不得不重新做一些事情,我会做一些不同的事情。
问题是:我应该重做吗?我想我们都面临着这样的困境——如何平衡维护活动的帮助与变革的破坏性影响。
显然,对于错误来说,改变势在必行。那里没有两难境地。对于新功能,这是实用性与增加复杂性的问题。我觉得处理这个问题很舒服。
我要问的是错误修复和新功能之间的模糊空间。一个例子是维护以符合框架设计指南或 CLS 合规性。对于一个图书馆,我写它时没有考虑 CLS 合规性,然后人们要求它。结果,我不得不修改接口以将 uint 换成 int。这是一个破坏性的变化,收益微乎其微(对大多数人来说)。
另一个问题:FxCop 合规性。为了让 FxCop 高兴,我不得不更改某些方法的参数名称。但这些变化实际上只影响使用反射的人——类型没有改变,只有参数的名称。
我现在正在处理的问题是:框架设计指南。关于事件的指南说事件应该有一个带有两个参数的签名:(对象源,EventArgs e)。但是那天我没有参加我的框架设计课程;)。我的库中的事件目前只需要一个 EventArgs 参数。
我现在正在向图书馆添加新活动。新事件是否应该遵循框架设计指南?还是图书馆已经建立的模式?如果我使用新活动的设计指南,我是否应该修改现有活动以也符合设计指南?如果是这样,如何进行迁移?我应该使用 [Obsolete] 属性吗?发行了多少?
更一般地说,我对在错误修复和新功能之间的这个模糊区域进行维护的想法很感兴趣。