質問
うれしく思って状態でしたいことが分かったコンセプトが表すクラスまたはインタフェース、そしてシリーズのサブクラス/subinterfacesを延長します。
例えば:汎用"DoiGraphNode" の"DoiGraphNode"を表すリソース の"DoiGraphNode"を表すJavaリソース の"DoiGraphNode"と関連する経路等 など。
私はを考えることができる三つの命名規則、皆さまからのご意見の方法を選択します。
オプション1:ものの名称、コンセプトです。
このように:DoiGraphNode,DoiGraphNodeResource,DoiGraphNodeJavaResource,DoiGraphNodeWithPath。
プロジェクトが明確である私が扱いやすいるすべてのオプションしていま
コン:なものです。もう一度に起動しています。
オプション2:に特別なものです。
このように:DoiGraphNode,ResourceDoiGraphNode,JavaResourceDoiGraphNode,PathBaseDoiGraphNode, 等 など。
プロジェクトである場合に、こんでコード
コン:探すことが難しくなりそうだが記憶してないの名が視覚的に一貫性
オプション3:の特別のものとは冗長テキスト
このように:DoiGraphNode,ResourceNode,JavaResourceNode,GraphNodeWithPath
プロジェクトなので、読み コン:のように見えcr-p、非相反する可能性があり、他の名前
解決
彼らが何であるかのためにそれらに名前を付けます。
それらを命名することは難しいか曖昧である場合は、、それは多くの場合、クラスがあまりにも多くの(単一責任の原則を)やっている兆候です。
名前の競合を避けるために、適切にあなたの名前空間を選択します。
Personnally、私が使用したい3
他のヒント
あなたが好き、それは主観的なものだものを使用。重要なことは、各クラスが何を表すかを明確にすることであり、名前が継承関係が意味をなすようなものであるべきです。私は実際にそれはしかし、名前に関係をエンコードするためにすべてのことが重要だとは思いません。それは、ドキュメントが何のためにあるのかだ(とあなたの名前はオブジェクトのために適切であるならば、人は何を継承するものにとの良好な推測を作ることができるはずです)。
は、それは価値がある何のために、私は通常、他の人のコードオプション2を見てオプション3を使用して、私の経験からオプション1よりも、おそらくより一般的である。
あなたは、コーディング標準の文書のいくつかのガイダンスを見つけることができます>ここを。
個人的に、私は、これは一般的な方法.NET Frameworkの名のオブジェクトですオプション2を好みます。たとえば、属性クラスを見てください。彼らはすべての属性(TestMethodAttribute)に終了します。同じことがのEventHandlerのために行く:OnClickEventHandlerは、Clickイベントを処理するイベントハンドラの推奨名前です。
。私は通常自分自身のコードとインタフェースを設計する際に、これを従ってみてください。したがってIUnitWriterはStringUnitWriterとDataTableUnitWriterを生成します。このように、私はいつも自分の基底クラスが何であるかを知っていて、それがより自然に読み込みます。私のためにうまく動作するようですので、自己文書化コードはすべてのアジャイル開発者のためのエンド目標です!
私の名前と同様のオプション1の授業に使用polymophically.私の論理づけに最も重要なビットの情報を掲載します。サイトカインこのサブクラスは基本的にはその祖先は、 (通常)の拡張子'新').このオプションで並び替えをする場合はリストのクラス名 の関連の授業を記します。I.。私の名前は、翻訳単位のファイル名)と同じ のクラス名で関連するクラスファイルが自然に上場。同様にこれは便利との差分を検索する
私が利用オプション2以前のプログラミング、キャリアに合うようであなたの言葉を借りれではinconsistant"という非常に直交す
私はよく利用オプション3の場合のサブクラスが拡張または仕様の場合は名です。例えば、私のシステムファイル名クラスから文字列 も大幅に延長する文字列のクラスとして大きく異なる 利用の意味:
Directory_entry_nameから文字列を追加しの豊富な可能です。File_nameらDirectory_entry_nameむしろ特殊な機能.Directory_nameらDirectory_entry_nameもており、内容も専門的です。
もとオプション1には、非修飾名を使用のためのインターフェースです。例えば私がクラスinterenceチェーン
- テキスト(インターフェース)
- Text_abstract(要旨(ベース)を一般化クラス)
- Text_ASCII(コンクリートのクラスの特定のためのASCIIコ)
- Text_unicode(コンクリートのクラス特有のunicode符号化)
たりすることによって動くということをインターフェースおよび抽象基底クラスを自動的に表示されずにソートされます。
オプション3は、より論理的継承の概念から、次の。あなたがインターフェイスまたはクラスを専門にしているので、名前は(存在する場合)、それはもはや基本実装を使っていることを示してはなりません。
があり、クラスから継承するかを確認するためのツールの多くがあるので、クラスの実際の機能を示す簡潔な名前が名前にあまりにも多くの種類の情報をパックしようとするよりも遠くに移動します。