代码之家  ›  专栏  ›  技术社区  ›  Daniel Brückner

如何命名接口的集合?

  •  0
  • Daniel Brückner  · 技术社区  · 17 年前

    情况如下。

    public interface IFoo { }
    
    public abstract class FooBase : IFoo { }
    

    IFoo 用一些额外的方法。

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

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

    1. 留着 IFooCollection -我不喜欢这个,因为它看起来像一个接口。
    2. 说出它的名字 FooCollection
    3. FooBaseCollection 因为 伊福 FooBase -我不喜欢这样,因为这可能永远不会是真的。
    4. 根本不创建类,而是为类提供扩展方法 IList<IFoo> 因为只有一个完整的方法-我不喜欢这样,因为更改代码是因为找不到类的名称。。。是的,那太恶心了。
    5. 一些我没有想到或忘记写下来的东西-我希望我会喜欢它!

    Microsoft .NET Library Standards .

    使现代化

    7 回复  |  直到 17 年前
        1
  •  10
  •   Alex B    17 年前

    我喜欢 FooCollection 您拥有概念对象“Foo”的集合,即使没有实际的 Foo 类或接口。这符合 IFoo SpecialFoo 会是一种特殊的“Foo”,即使没有

    我绝对同意 IFooCollection 是错误的,因为隐含的接口。

        2
  •  7
  •   Steve Willcock    17 年前

    FooCollection-Foo没有明显的含义,因此很难概念化。尝试使用“真实”的类/接口名称,它会更有意义-例如。

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

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

        3
  •  0
  •   Joel Coehoorn    17 年前

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

        4
  •  0
  •   Jason Coyne    17 年前

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

    我能想到的唯一额外的一个是Collectionofoo,但这不符合惯例。

    我可能会选择IFooCollection。

        5
  •  0
  •   Eric Petroelje    17 年前

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

        6
  •  0
  •   Peter Lillevold Rene    17 年前

    IMO#2是正确的命名,尽管我也建议您使用愚人,因为您来自一个列表。

        7
  •  0
  •   Michael Borgwardt    17 年前

    怎么样 CollectionOfIFoo ?

    就我个人而言,我不喜欢在接口前加上“I”的惯例——这基本上是一种糟糕的匈牙利符号,这就是为什么它不好的一个例子。