由于我们代码库的工作方式,建议我不要在共享代码库中编辑某些方法。相反,我决定制作一个新方法来调用旧方法,并且还要执行我们团队希望该方法执行的新工作。我预见到的问题是,并非团队中的每个人都意识到新方法并仍然使用共享代码库中的旧方法。
TLDR:
共享代码库具有SharedCode.Function。
我创建了OurCode.Function来做一些事情,然后调用SharedCode.Function。
我无法编辑SharedCode.Function或它包含的项目。
是否有可能在我们的项目中将SharedCode.Function标记为过时的编译器,以某种方式警告编译器以其他方式标记OurCode.Function取代了它?
编辑:
可能需要提及-这些是日志记录函数,因此,如果开发人员不小心调用了SharedCode.Function而不是OurCode.Function,唯一的结果是我们捕获的数据少于我们期望的数量,它仍然可以编译并运行良好。这是我要尝试使其成为编译器警告的主要原因,以便所有不知道使用新功能的开发人员都可以找到。
答案 0 :(得分:2)
最短的方法是将
ObsoleteAttribute
添加为属性 的方法。确保包括适当的说明:
[Obsolete("Method1 is deprecated, please use Method2 instead.")]
public void Method1()
{ … }
答案 1 :(得分:1)
我认为在这种特定情况下,适配器模式可能会产生奇迹。本质上,您最终会在OurCode和SharedCode之间创建一个抽象。
这将隔离对SharedCode函数的访问,以便只有适配器才能使用共享代码的函数。最终可能是适配器中的某些功能只是提供了传递,但是其中一些功能将具有需要应用的额外逻辑(例如在您要询问的场景中),并由适配器来实现实施起来很容易。
由于所有客户端代码无法直接访问共享代码,因此被迫使用适配器。
如果可以访问源代码,我建议使用其他人指出的Obsolete属性。但是,由于您无权访问代码库,因此我认为在代码与不可访问的代码之间建立一层抽象可能会非常有益。
现在显然,对于实际实施是否有意义,我尚不了解您的情况的全部内容,因此请不要盲目驾驶,但希望这会给您一些想法! :)
参考这四本书,或查看以下资源:
https://martinfowler.com/bliki/RequiredInterface.html