我该怎样理智地命名一个“伞”类型?

时间:2010-02-24 09:49:31

标签: c# oop naming-conventions naming

这总是让我感到困扰......

假设我有一个接口IFiddle和另一个接口,它只是聚合了几个不同的IFiddle

public interface IFiddleFrobbler
{
    IFiddle Superior { get; }
    IFiddle Better { get; }
    IFiddle Ordinary { get; }
    IFiddle Worse { get; }
    IFiddle Crackpot { get; }
}

(具体IFiddleFrobblerIFiddle取决于配置,由工厂创建。)

我一再偶然发现这种“伞”类型的命名 - 我想用描述性的东西来交换“Frobbler”。

  • “Collection”,“List”和“Set”不够好,因为它不是可以枚举,添加或删除元素的集合/列表/集合。
  • “经理”已经出局,因为没有管理工作 - 工厂和配置处理。
  • “聚合器”让它听起来就像从GoF书中直接挑选出来的那样(虽然我认为它们不会破坏“demeter法则” - 这不是主题)。

请告诉我,对于我的“伞形”类型,什么是一个好的命名方案?


编辑:作为xtofl pointed out in a comment,实际上比我上面首次公开的更多语义。如果我改为做以下事情,我认为我的需要更清楚:

//
// Used for places where the font width might need
// to be tapered for a rendered  text to fit.
//
public interface ITaperableFont
{
    Font Font { get; }
    Boolean CanTaper { get; }

    void Taper();
}

//
// Used for rendering a simple marked-up text in
// a restricted area.
//
public interface ITaperableFonts
{
    ITaperableFont Biggest{ get; }
    ITaperableFont Big { get; }
    ITaperableFont Normal { get; }
    ITaperableFont Small { get; }
    ITaperableFont Smallest { get; }
}

事实上,我已经将上述现实生活中的问题确定为设计缺陷,而不是命名问题,这是几个人在下面指出的气味。

5 个答案:

答案 0 :(得分:7)

你能使用复数:IFiddles吗?

答案 1 :(得分:7)

我同意你的观点,认为类,接口或抽象类很难正确。我之前使用过的一些可能的名称是:

  • xxx Assistant
  • Composite XXX
  • XXX Coordinator
  • XXX Group

答案 2 :(得分:3)

我会说你选择的名字应该取决于你想要达到的目标。在代码示例中,我会说你正在做的是设置评级,所以我可能会称之为IFiddleRating

作为一般性答案,我会说“这取决于”:)我觉得在尝试做之后给出一些东西是个好主意,而不是“它是什么”

答案 3 :(得分:3)

正如波普所说:“如果你不能说出来,那我就会在设计中闻到一些腥味。”

可能会重新考虑您的设计。

IFiddles : IDictionary<SomeType, IFiddle>
{
}

更新:如果你想让它自己创建一个接口:

IReadOnlyDictionary<TKey,TValue>
{
     TValue this[TKey] { get; }
     int Count { get; }
     ...
}

你的生活仍然可以像以前一样容易。

答案 4 :(得分:1)

我认为这确实是个人偏好的问题,所以我启动了一个词库,并寻找“家庭”的同义词(这本身就可以了)。

亲属,分类,流派,集团,种类,细分,协会,隶属关系,联盟,家族,集团,俱乐部,联盟,组合,组合,联盟,联合会,国会,合作社,家庭,联邦,团契,兄弟会,帮派,公会,联赛,暴徒,订单,组织,环,社会,联邦,联谊会,辛迪加,搭配,合作,部落,部队,马戏团,动物园

我放弃了一些具有特定技术含义的东西(如工会,戒指,游泳池)......挑选你最喜欢的东西。