如何命名界面集合?

Dan*_*ner 0 .net collections interface naming-conventions

情况如下.

public interface IFoo { }

public abstract class FooBase : IFoo { }
Run Code Online (Sandbox Code Playgroud)

现在我需要IFoo一些额外的方法集合.

public class IFooCollection : List<IFoo>
{
   public void UsefullMethod() { }
}
Run Code Online (Sandbox Code Playgroud)

问题是,IFooCollection当它是一个类时看起来像一个接口.选项如下.

  1. 保持它IFooCollection- 我不喜欢这个,因为它看起来像一个界面.
  2. 把它命名FooCollection- 我不喜欢这个,因为它不是foos的集合.
  3. 把它变成FooBaseCollection因为所有的实现IFoo派生自FooBase- 我不喜欢这个,因为这可能永远不会是真的.
  4. 不要创建类,而是提供扩展方法,IList<IFoo>因为只有一个完整的方法 - 我不喜欢这样,因为更改代码因为找不到类的名称...是的,这是令人讨厌的.
  5. 我没有想到或忘记写下来的东西 - 我希望我会喜欢它!

那你会怎么做?我错过了一个命名约定吗?我们基本上使用这个Microsoft .NET库标准.

UPDATE

代码不会变得普遍 - 它只是在GUI工具中将一些数据放入服务器.所以我不关心将这些方法与其他集合一起使用或忽略这些方法.

Ale*_*x B 10

我喜欢FooCollection你有一个概念对象"Foo"的集合,即使没有实际的Foo类或接口.这与IFoo"Foo"的界面保持一致,即使没有Foo课程.SpecialFoo即使没有Foo上课,也会是一种特殊的"Foo" .

IFooCollection由于隐含的界面,我绝对同意这是错误的.


Ste*_*ock 7

FooCollection - 由于Foo没有任何意义,因此'Foo'并不明显,因此很难概念化.尝试使用"真正的"类/接口名称,它更有意义 - 例如

public class ErrorHandlerCollection : List<IErrorHandler>
{
  public void PublishErrors(){//...}
}
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为ErrorHandlerCollection是错误处理程序的集合.实现IErrorHandler的任何东西都是一个错误处理程序,因此ErrorHandlerCollection中的任何内容都将是一个错误处理程序.