是否有实现接口IThing的类Thing是一种不好的做法?

时间:2015-07-08 08:14:21

标签: c# naming-conventions

我有一个特定的类Thing,以及它实现的一个名为IThing的接口。使用IThing的每个人都可以假设它真的是Thing,因为它是实现此接口的唯一类,但同时他知道他只能访问Thing的公共成员的某个子集,这是一个非常好的设计理由 - 基本上,IThingThing的只读版本(&#39} ;比这更复杂一点,但为了这个问题,我们假装它只是只读/写的区别。)

虽然这是一个很好的约定吗?作为替代方案,我可以将此接口命名为IThingReadOnly或命名类ThingWritable,或类似的东西,但似乎这些名称在大型代码库中体积较大且可读性较差。

我还广泛地为接口和类使用扩展方法,因此我也有ThingExtensionsIThingExtensions。它非常有用,因为读取此扩展代码的每个人都可以假设它只分别使用ThingIThing的公共成员。但是,由于某种原因,项目中同时包含ThingExtensionsIThingExtensions个文件似乎有点过时了。

那么,哪一个更好的选择 - 将ThingIThing放在一边,或重命名其中一个?

关于投票结果的更新

这是一个基于意见的问题,因为它是关于最佳做法的问题 - 但它不是主要基于意见的问题(请注意区别)。对于最佳实践,SO有很多很棒的问题和答案,所以我认为这个问题和其他我不了解的最佳实践问题之间存在差异,或者这个问题具有相同的权利与任何其他最佳实践问题一样存在。

2 个答案:

答案 0 :(得分:1)

首先,我建议仅针对您无法控制的类型使用扩展方法,例如:像IEnumerable这样的.NET类型。但是你可以考虑创建两个不同的接口,一个用于读取的基本接口(让我们称之为IThingRead)和另一个代表你的实际Thing - 类型(IThingWrite)的接口-modifiers。

无论如何为每个类创建一个界面都是很好的做法,并通过模拟你的类型来简化测试。

答案 1 :(得分:0)

如果您确定不需要其他接口实现,并且不需要为了测试目的而模拟接口,则只需删除接口并使用具体类。

否则继续使用IThing和Thing(这是正常的命名约定)。 我只会创建IThingExtensions