拟人化界面 - 好的或坏的想法?

时间:2009-08-27 13:37:05

标签: c# interface role-based

我有一段时间尝试过anthropomorphise(意思是人类可读的)我给接口的名字,对我来说这就像给一个接口一个基于角色的名字一样 - 试图在名称中捕获接口的目的。

我和其他认为这有点奇怪和幼稚的开发者进行了讨论。

SO的人怎么想?

示例(C#语法):

public interface IShowMessages
{
    void Show(string message);
    void Show(string title, string message);
}

public class TraceMessenger : IShowMessages
{
}

public interface IHaveMessageParameters
{
    IList<string> Parameters { get; }
}

public class SomeClass : IHaveMessageParameters
{
}

9 个答案:

答案 0 :(得分:10)

答案 1 :(得分:4)

当然,您应该始终选择人类可读的标识符。如下所示:将他们传达的意义传达给那些不熟悉代码要解决的问题的人。

但是,使用长标识符不会使您的标识符更具“可读性”。对于任何有经验的程序员来说,'tmp'传达的信息与'temporaryVariable'一样多。 “i”与“dummyCounter”等相同。

在您的特定示例中,接口名称实际上非常烦人,因为用于开发面向对象系统的人将读取继承为“是a”。而'SomeClass是一个IHaveMessageParameters'听起来很傻。

尝试使用IMessagePrinter和IMessageParameterProvider。

答案 2 :(得分:3)

是的,这听起来不错。

有什么替代方案?

代码应该是人类可读的。任何傻瓜都可以编写计算机可以理解的代码。困难的部分是编写人类可以理解的代码。

人类必须维护代码,因此尽可能易于维护非常重要 - 包括代码应尽可能可读。

答案 3 :(得分:1)

使用简单的人类可读名称并不奇怪。但是使用I for interface也代表第一人I,好像它在谈论自己......有点不寻常,是的。

但最重要的是,无论对你有用,并且你和你的团队都能理解这一点。你必须选择有效的方法。

答案 4 :(得分:1)

在我看来,这种方法只会增加开发人员提出这些名称的负担,因为它将I作为句子的一部分进行整合。例如,我发现IDisposableICanBeDisposed更难阅读。

答案 5 :(得分:1)

接口描述行为,因此我将它们命名为以便传达它们强制要求的行为。这种“通常”意味着名称是动词,(或副词)或某种形式的动作描述短语。结合界面的“I”,这看起来就像你在做什么......

ICanMove,IControllable,ICanPrint,ISendMesssages等......

在IControllable,IDisposable,IEnumerable等中使用副词会传达与动词形式相同的思想,而且很简单,所以我也使用这个形式......

最后,比您命名界面更重要(或至少同样重要)的是保持您设计的接口尽可能小且逻辑性地包含在内。您应该努力让每个接口代表尽可能小的逻辑连接一组方法/属性。当一个接口有如此之多以至于没有明显的名称可以描述它所要求的所有行为时,它表明它有太多的内容,并且它需要被重构为两个或更多更小的接口。因此,以您提出的方式设置maming接口有助于实施这种类型的组织设计,这是一件好事。

答案 6 :(得分:1)

在OP的例子中,拟人方式与替代方案进行了比较 - 例如:IShowMessages与IMessageShower之类的东西相比。但是 - 情况并非总是如此。我在编写游戏对象时使用的接口包括:IOpenClosable和ILockable。像ICanBeOpenedAndClosed和ICanBeLocked这样的替代品会更加冗长。或者你可以简单地做IAmOpenClosable和IAmLockable - 但是你只是为了拟人化效果添加“Am”而没有真正的信息利益。如果传达相同数量的信息,我就是为了尽量减少冗长。

答案 7 :(得分:0)

只要尝试实现的内容的语义不会丢失,并且简洁性不会受到不可挽回的损害(IDoLotsOfThingsWhichIncludesTheFollowingColonSpace ...)。我一般都不会介意除了自己以外的其他人。尽管如此,有很多背景,其中简洁至关重要,这是不可接受的。

答案 8 :(得分:0)

老实说,故意使用第一人称的“I for Interface”惯例似乎有点傻。什么开始作为一个可爱的双关语变得不可能始终如一地遵循,并在以后最终蒙上阴影。也就是说,你的独立示例读得很清楚,我也不会有问题。