敏捷实践以避免弃用代码?

Jam*_* M. 5 api agile deprecated

我正在将一个开源Java库转换为C#,它有许多标记为已弃用的方法和类.这个项目是一个以干净的方式开始的机会,所以我打算完全删除它们.然而,作为大型项目的新手,我很紧张,情况会再次出现.由于敏捷开发的大部分内容都围绕着使某些东西现在正常工作并在以后需要时进行重构,因此API的弃用似乎必然是一个常见的问题.即使我不完全确定项目的未来发展方向,我是否可以采取预防措施来避免/尽量减少API弃用?

Mat*_*lls 15

我不确定你能做多少.需求发生变化,如果您必须确保API的客户端不会被更新的API版本破坏,那么您将依赖于简单地弃用代码,直到您认为没有人使用已弃用的代码.

在代码上放置[Obsolete]属性会导致编译器在有对过时方法的任何引用时创建警告.这样,API的客户端,如果他们勤于修复他们的编译器警告,可以逐步转移到新方法,而不会破坏新版本.

如果您使用带有字符串的ObsoleteAttribute的覆盖它很有用:

[Obsolete("Foo is deprecated. Use Bar instead for munging widgets.")]
Run Code Online (Sandbox Code Playgroud)

<轻浮>

也许你可以创建一个TimeBombAttribute:

[TimeBomb(new DateTime(2010,1,1), "Foo will blow up! Better use Bar, or else."]
Run Code Online (Sandbox Code Playgroud)

在您的代码中,反映具有timebomb属性的方法,如果在指定日期之后调用它们,则抛出KaboomException.这将确保在2010年1月1日之后没有人使用过时的方法,您可以很好地清理您的API.:)

</轻浮>


Jon*_*eet 5

正如Matt所说,该Obsolete属性是你的朋友......但无论何时应用它,都要提供如何更改调用代码的详细信息.这样你就可以更好地改变人们.您可能还需要考虑指定您希望删除该方法的版本(可能是下一个主要版本).

当然,你应该在确保勤奋不叫过时的代码-尤其是在示例代码.