我有一个特定的类Thing
,以及它实现的一个名为IThing
的接口。使用IThing
的每个人都可以假设它真的是Thing
,因为它是实现此接口的唯一类,但同时他知道他只能访问Thing
的公共成员的某个子集,这是一个非常好的设计理由 - 基本上,IThing
是Thing
的只读版本(&#39} ;比这更复杂一点,但为了这个问题,我们假装它只是只读/写的区别。)
虽然这是一个很好的约定吗?作为替代方案,我可以将此接口命名为IThingReadOnly
或命名类ThingWritable
,或类似的东西,但似乎这些名称在大型代码库中体积较大且可读性较差。
我还广泛地为接口和类使用扩展方法,因此我也有ThingExtensions
和IThingExtensions
。它非常有用,因为读取此扩展代码的每个人都可以假设它只分别使用Thing
和IThing
的公共成员。但是,由于某种原因,项目中同时包含ThingExtensions
和IThingExtensions
个文件似乎有点过时了。
那么,哪一个更好的选择 - 将Thing
和IThing
放在一边,或重命名其中一个?
关于投票结果的更新:
这是一个基于意见的问题,因为它是关于最佳做法的问题 - 但它不是主要基于意见的问题(请注意区别)。对于最佳实践,SO有很多很棒的问题和答案,所以我认为这个问题和其他我不了解的最佳实践问题之间存在差异,或者这个问题具有相同的权利与任何其他最佳实践问题一样存在。
答案 0 :(得分:1)
首先,我建议仅针对您无法控制的类型使用扩展方法,例如:像IEnumerable
这样的.NET类型。但是你可以考虑创建两个不同的接口,一个用于读取的基本接口(让我们称之为IThingRead
)和另一个代表你的实际Thing
- 类型(IThingWrite
)的接口-modifiers。
无论如何为每个类创建一个界面都是很好的做法,并通过模拟你的类型来简化测试。
答案 1 :(得分:0)
如果您确定不需要其他接口实现,并且不需要为了测试目的而模拟接口,则只需删除接口并使用具体类。
否则继续使用IThing和Thing(这是正常的命名约定)。 我只会创建IThingExtensions