.net 如何命名接口的集合?
情况如下.net 如何命名接口的集合?,.net,collections,interface,naming-conventions,.net,Collections,Interface,Naming Conventions,情况如下 public interface IFoo { } public abstract class FooBase : IFoo { } 现在我需要一个带有一些附加方法的IFoo集合 public class IFooCollection : List<IFoo> { public void UsefullMethod() { } } 公共类IFooCollection:列表 { public void UsefullMethod(){} } 问题是,IFooCo
public interface IFoo { }
public abstract class FooBase : IFoo { }
现在我需要一个带有一些附加方法的IFoo
集合
public class IFooCollection : List<IFoo>
{
public void UsefullMethod() { }
}
公共类IFooCollection:列表
{
public void UsefullMethod(){}
}
问题是,IFooCollection
作为类时看起来像一个接口。选项如下
IFooCollection
——我不喜欢它,因为它看起来像一个接口FooCollection
——我不喜欢它,因为它不是foo的集合FooBaseCollection
,因为IFoo
的所有实现都源自FooBase
——我不喜欢这样,因为这可能永远不会是真的代码不会变得广泛——它只是在GUI工具中,用于将一些数据放入服务器。因此,我不在乎将这些方法与其他集合一起使用,也不在乎忽略这些方法。我喜欢
FooCollection
您拥有概念对象“Foo”的集合,即使没有实际的Foo
类或接口。这与IFoo
是一个“Foo”的接口是一致的,即使没有Foo
类SpecialFoo
将是一种特殊的“Foo”,即使没有Foo
类
我完全同意,由于隐含的接口,
IFooCollection
是错误的。我实际上更喜欢#4而不是构建自己的集合类型,因为最终用户会希望将其IFoo实现对象填充到自己的列表和其他集合中。这样,这些集合将按预期工作。您已经确定了大多数选择
我能想到的唯一额外的一个是Collectionofoo,但这不符合惯例
我可能会选择IFooCollection。就我个人而言,我喜欢使用扩展方法的想法。如果您担心人们很容易找到扩展方法,只需将它们放在与IFoo接口相同的代码文件中的静态类中即可。或者在同一名称空间中的单独文件中创建一个“IFooExtensions”类,以便人们在查看“IFoo”时很容易发现它。FooCollection-使用“Foo”并不明显,因为Foo没有任何意义,所以很难概念化。尝试使用“真实”的类/接口名称,它会更有意义-例如
public class ErrorHandlerCollection : List<IErrorHandler>
{
public void PublishErrors(){//...}
}
公共类ErrorHandlerCollection:列表
{
public void PublishErrors(){/…}
}
这是有意义的,因为ErrorHandlerCollection是错误处理程序的集合。实现IErrorHandler的任何东西都是错误处理程序,因此ErrorHandler集合中的任何东西都将是错误处理程序。IMO\35; 2是正确的命名,不过我也建议您使用傻瓜,因为您是从列表派生的。那么
CollectionAfoo
呢
就我个人而言,我不喜欢在接口前加上“I”的惯例——这基本上是一种糟糕的匈牙利符号,这就是为什么它不好的一个例子