2

私はしばらくの間、インターフェイスに付ける名前を擬人化 (人間が読めるという意味) しようと試みてきました。これは、インターフェイスに役割ベースの名前を付けることと同じです。つまり、インターフェイスの目的を名前に取り込もうとしています。

私は、これは少し奇妙で幼稚だと考える他の開発者と話し合っていました。

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
{
}
4

9 に答える 9

10

IThinkItsATerribleIdea

于 2009-08-27T13:41:53.557 に答える
4

もちろん、人間が読める識別子を常に選択する必要があります。のように: コードによって解決される問題にあなたほど精通していない人にさえ、それらが伝える意味を伝えます。

ただし、長い識別子を使用しても、識別子が「読みやすく」なるわけではありません。ある程度の経験を積んだプログラマにとって、「tmp」は「temporaryVariable」と同じくらい多くの情報を伝達します。「i」と「dummyCounter」などについても同様です。

あなたの特定の例では、オブジェクト指向システムの開発に慣れている人は継承を「is a」と読むため、インターフェイス名は実際には非常に面倒です。そして、「SomeClass は IHaveMessageParameters です」はばかげているように聞こえます。

代わりに IMessagePrinter と IMessageParameterProvider を使用してみてください。

于 2009-08-27T13:42:55.803 に答える
3

はい、それは良い考えのように聞こえます。

代替手段は何ですか?

コードは人間が読める形式にする必要があります。どんな愚か者でも、コンピューターが理解できるコードを書くことができます。難しいのは、人間が理解できるコードを書くことです。

人間はコードを保守しなければならないので、可能な限り保守しやすいことが非常に重要です。これには、コードを可能な限り読みやすくすることも含まれます。

于 2009-08-27T13:39:23.797 に答える
1

OPの例では、擬人化された方法は代替手段とよく比較されます-例:IShowMessagesとIMessageShowerのようなもの。しかし、これは必ずしもそうではありません。ゲーム オブジェクトをプログラミングするときに使用したインターフェイスには、IOpenClosable と ILockable があります。ICanBeOpenedAndClosed や ICanBeLocked などの代替は、より冗長になります。または、単純に IAmOpenClosable と IAmLockable を実行することもできますが、その場合、擬人化効果のためだけに「Am」を追加することになり、実際の情報の利点はありません。同じ量の情報が伝達される場合、冗長性を最小限に抑えることに賛成です。

于 2009-08-27T13:58:14.723 に答える
1

人間が読める単純な名前を使用することは何ら不思議なことではありません。しかし、Ifor インターフェースを使用して、それ自体について話しているかのように一人称Iを表すことも...少し珍しいです。

しかし、肝心なのは、あなたにとってうまくいき、あなたとあなたのチームが理解できるものは何でも良いということです。あなたはうまくいくものに行かなければなりません。

于 2009-08-27T13:40:03.733 に答える
1

私の意見では、このアプローチは I を文の一部として統合するため、開発者がそのような名前を考え出す負担が増えるだけです。IDisposableたとえば、 よりも読みにくいとは思いませんICanBeDisposed

于 2009-08-27T13:45:26.800 に答える
1

インターフェースは振る舞いを説明するので、インターフェースが義務付けている振る舞いを伝えるために名前を付けています。この「一般的に」は、名前が動詞 (または副詞)、または何らかの形式のアクション記述句であることを意味します。インターフェイスの「I」と組み合わせると、これはあなたがしていることのように見えます...

ICanMove、IControllable、ICanPrint、ISendMessages など...

IControllable、IDisposable、IEnumerable などのように副詞を使用すると、動詞形式と同じ考えが伝わり、簡潔になるため、この形式も使用します...

最後に、インターフェースに名前を付けるよりも重要 (または少なくとも同等に重要) は、設計するインターフェースをできるだけ小さくし、論理的に含めることです。各インターフェイスができるだけ小さく、論理的に接続された一連のメソッド/プロパティを表すようにする必要があります。インターフェイスに必要なすべての動作を説明する明確な名前がないほど多くのものが含まれている場合、それはインターフェイスが多すぎて、2 つ以上の小さなインターフェイスにリファクタリングする必要があることを示しています。したがって、あなたが提案している方法でインターフェースを操作することは、このタイプの組織設計を強化するのに役立ちます。これは良いことです。

于 2009-08-27T13:47:45.720 に答える
0

達成しようとしているもののセマンティクスが失われず、簡潔さが取り返しのつかないほど損なわれない限り (IDoLotsOfThingsWhichIncludesTheFollowingColonSpace...)。私は通常、自分以外の誰かがそれをしてもかまいません。それでも、簡潔さが最も重要であり、これが受け入れられない状況はたくさんあります。

于 2009-08-27T13:50:35.980 に答える
0

一人称で「I for Interface」という慣習を意図的に使用することは、正直言って少しばかげているように思えます。かわいい駄洒落として始まったものは、一貫して従うことができなくなり、後で意味を曇らせてしまいます. そうは言っても、あなたのスタンドアロンの例は十分にはっきりと読めるので、問題はありません。

于 2014-06-10T01:29:20.053 に答える