質問: 私はしばしば、インターフェイスまたはクラスによって表される概念を持ち、それを拡張する一連のサブクラス/サブインターフェイスを持っている状況にあります。例えば : ジェネリック "DoiGraphNode" A "DoiGraphNode" 等 I関連パスとJavaリソース A "DoiGraphNode" を表すリソース A "DoiGraphNode"、等を表します3つの命名規則を考えることができ、どのように選ぶべきかについてのコメントを感謝するでしょう。 --- オプション1:常にコンセプトの名前から始めます。したがって :DoiGraphNode、DoiGraphNodeResource、DoiGraphNodeJavaResource、DoiGraphNodeWithPathなど プロ:あまり:私が コンを持っているすべてのオプションを簡単に確認することができ、私が扱っていますどのような非常に明確ですナチュラル?すべて同じに見えますか? --- オプション2:最初に特殊なものを入れます。したがって :などDoiGraphNode、ResourceDoiGraphNode、JavaResourceDoiGraphNode、PathBaseDoiGraphNode、 など、 プロ:私はコードでそれを見るとき、それは非常に明確である コン:特に、それは難しいかもしれ検索私は名前を覚えていない場合は、視覚的な一貫性の欠如 --- オプション3:特別なものを入れて、冗長なテキストの一部を削除 したがって:DoiGraphNode、ResourceNode、JavaResourceNode、GraphNodeWithPath プロ:書き込み、 コンを読むことがそれほどない:他の名前 何が好き
回答: 私は通常、オプションが1に似ていますが、特にクラスがポリモフィックに使用される場合はそうです。 私の推論は、情報の最も重要なビットが最初にリストされているということです。 (つまり、サブクラスは基本的に先祖のものであるという事実、 は(通常)拡張が追加されています)。 クラス名のリストを並べ替えるときには、 という関連するクラスが一緒にリストされるので、このオプションも好きです。 I.私は通常翻訳単位(ファイル名)を と同じ名前にして、関連するクラスファイルが自然に一緒にリストアップされるようにします。 同様に、これはインクリメンタルサーチで便利です。 プログラミングのキャリアで先にオプション2を使用する傾向がありましたが、私はそれを避けるために今は避けていますが、それは「不一致」であり、非常に直交していないと言えるからです。 サブクラスが実質的な拡張または仕様を提供する場合、または名前がかなり長い場合、オプション3を使用することがよくあります。 は、例えば、私のファイルシステム名のクラスは、文字列 由来が、彼らは大幅にStringクラスを拡張し、大幅に異なる 使用/意味を持っている:文字列から派生 Directory_entry_name豊富な機能を追加します。 Directory_entry_nameから派生したFile_nameには、特殊な機能があります。 Directory_entry_nameから派生したDirectory_nameには、やや特殊な機能もあります。 オプション1と一緒に、私は通常、インターフェイスクラスに非修飾名を使用します。 たとえばI、クラスinterence鎖を有するかもしれない。 * テキスト(インターフェース) * Text_abstract(アブストラクト(ベース)一般クラス) * Text_ASCII * Text_unicode(コーディングASCIIのための特定の具体的なクラス) (ユニコードコーディングに固有の具体的なクラス) 私は、インターフェイスと抽象基本クラスが自動的にソートされたリストの最初に表示されるようにします。