【发布时间】:2010-02-04 15:01:53
【问题描述】:
我有一个使用文件系统实体来操作数据的类。我们有几种方法专门设计用于(尝试)处理我们在这种方法中面临的一些问题(文件锁定、不存在的文件等)。理想情况下,如果其他开发人员尝试直接通过 System.IO 而不是使用辅助方法访问文件系统,我希望能够发出警告。
这可能吗?我正在寻找的行为是有效地将诸如 File.ReadAllText() 之类的方法标记为已过时,但仅在此项目中(不是解决方案范围内)。
我已经进行了一些挖掘,看起来我唯一的选择是“告诉他们确保他们使用你的方法”。我希望有人能给我一个不同的,更有帮助的答案。 :)
--编辑-- 自定义 StyleCop 或 FxCop 规则的建议很好,但不幸的是在这种情况下不切实际(并非部门中的每个开发人员都使用这些优秀的工具),并且进行文件访问的合法方法 do 使用 System .IO。在合法方法中添加“忽略”属性也是一个危险的想法。如果有人看到我如何“破坏”我自己的规则,他们很可能会将属性复制到他们自己的方法中。
【问题讨论】:
-
假的。为了使用 System.IO,您必须首先在
using中或直接引用它。因此,在代码审查期间您需要做的就是为System.IO“查找所有文件”。 -
事后考虑,您可能会通过故意引入冲突来毒化命名空间,但这似乎比它的价值要麻烦得多。
-
一个有趣的想法,但“授权”方法也必须使用 System.IO。在代码库中发现非法用途可能很棘手。
-
“授权”方法将单独构建在允许具有 System.IO 引用的库中。
-
嗯,我突然想到这只是分层的一个特例。防止(例如)UI 层在不通过规则层的情况下接触 DB 层的方法是将它们保存在单独的库中,并拒绝让 UI 库作为一个整体来引用 DB 库。同样,您可以编写一个文件 I/O 层,然后从其他项目中删除对 System.IO 程序集的所有引用。这样,即使他们添加
using或指定范围,它也会失败。是的,内省可以避免这种情况,但这本身就是一个危险信号。
标签: c# attributes obsolete