如何命名界面集合?

时间:2009-04-16 15:06:50

标签: .net collections interface naming-conventions

情况如下。

public interface IFoo { }

public abstract class FooBase : IFoo { }

现在我需要一些IFoo的集合以及其他一些方法。

public class IFooCollection : List<IFoo>
{
   public void UsefullMethod() { }
}

问题是IFooCollection看起来像一个接口,而它是一个类。选项如下。

  1. 保持IFooCollection - 我不喜欢这样,因为它看起来像一个界面。
  2. 将其命名为FooCollection - 我不喜欢这样,因为它不是foos的集合。
  3. 将其变为FooBaseCollection,因为IFoo的所有实现都来自FooBase - 我不喜欢这样,因为这可能永远不会是真的。
  4. 根本不创建类,而是为IList<IFoo>提供扩展方法,因为只有一个完整的方法 - 我不喜欢这样,因为更改代码因为找不到类的名称。 ..是的,这很讨厌。
  5. 我没有想到或忘记写下来的东西 - 我希望我会喜欢它!
  6. 那你会怎么做?我错过了一个命名约定吗?我们基本上使用此Microsoft .NET Library Standards

    更新

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

7 个答案:

答案 0 :(得分:10)

我喜欢FooCollection你有一个概念对象“Foo”的集合,即使没有实际的Foo类或接口。这与IFoo保持一致,即使没有Foo类,也是“Foo”的接口。 SpecialFoo即使没有Foo类,也会是一种特殊的“Foo”。

我绝对同意IFooCollection因为隐含的界面而错误。

答案 1 :(得分:7)

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

public class ErrorHandlerCollection : List<IErrorHandler>
{
  public void PublishErrors(){//...}
}

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

答案 2 :(得分:0)

我实际上比构建自己的集合类型更喜欢#4,因为最终用户会想要将他们的IFoo实现对象填充到他们自己的列表和其他集合中。这样,这些集合将按预期工作。

答案 3 :(得分:0)

您已经确定了大多数选择。

我能想到的唯一一个是CollectionOfIFoo,但这与惯例不一致。

我可能会选择IFooCollection。

答案 4 :(得分:0)

就个人而言,我喜欢使用扩展方法的想法。如果您担心人们能够轻松找到扩展方法,只需将它们放在与IFoo接口相同的代码文件中的静态类中。或者在同一名称空间中的单独文件中创建“IFooExtensions”类,以便在人们查看“IFoo”时轻松发现

答案 5 :(得分:0)

IMO#2是正确的命名,但我也建议使用FooList,因为你是从List派生的。

答案 6 :(得分:0)

CollectionOfIFoo怎么样?

就个人而言,我不喜欢使用“我”前缀接口的惯例 - 它基本上是一种糟糕的匈牙利符号形式,这就是为什么它不好的一个例子。

相关问题