2009-04-07 1 views
3

クラスが抽象クラスであり、インタフェースを簡単に識別できるように直接インスタンス化されることを一目で分かりやすくすることは有用であると思います。"A"のようなインタフェースを持つ抽象クラスの先頭に "I"が付いていますか?

私の質問は、なぜ "AFourLeggedAnimal:IAnimal"がキャッチしていないのですか?それは単に「抽象クラスFourLeggedAnimal」の代わりに「4つの脚の動物」として混乱させるなど、混乱の可能性があるからです。それとももっと何か?

学校のJavaから仕事中にC#に来て、私は "I"プレフィックス命名規則がクラスの一覧を見ているときに非常に便利であることを発見しました。そして、それはコンクリートコードを見る必要がなく、一目で非具体的なクラスを表示することができます。

+0

"A"を "抽象"に拡張しないのはなぜですか? ?長いフォームを使用することは、測定可能な方法で生産性を低下させるようなものではありません。このように省略しないでください。材料的に利益が得られない可能性があります。 –

+0

私は分類のために接尾辞を使います。私はまだMFCリファレンスのインデックスを覚えています。 CDocument、CView、CWindowなどのクラスのbazillionエントリを含む文字Cセクション以外のエントリはほとんどありませんでした。 –

答えて

12

Joelの言葉に接尾辞 "Base"を使用してください。あなたのプロジェクトで多くのことをしたら、それは離れて伝えるために非常に簡単です:

多くの「抽象」クラスは「抽象」などが付いているJavaでは
public abstract AnimalBase 
{ 
    public AnimalType AnimalType { get; set; } 
} 

public abstract HorseBase : AnimalBase 
{ 
    public HoovesManufacturer HoovesManufacturer { get; set; } 
} 

public class Pony : HorseBase 
{ 
    public Pony() 
    { 
    } 
} 
+0

lol、これは、それらの "奇妙な"瞬間の一つだと思います。私は基本的な接尾辞を完全に忘れていましたが、私はそれをある時点で知っていました。あなたが良い例を挙げたので、受け入れられたものとしてマーキングする。 – Davy8

+0

ホーヴズメーカー?それはダムとサイアーですか? – tvanfosson

+0

@tvanfosson:lol Opera Mobileで書いたのですが、スペルチェッカーはありません。 – eduncan911

13

"Base"の接尾辞を使用することをお勧めします。

+0

私の質問 - なぜベース? –

+0

ほとんどの人が用語で「基本」クラスを使用してOOPを教えられていたからです。それは他のプログラマによって理解されるでしょう。 –

+1

しかし、それが基本クラスでない場合はどうなりますか?同様に、インターフェース、そのインターフェースを実装するクラス、およびそのクラスのサブクラスがあります。あなたはまだベースの前に置かれますか? –

4

抽象クラスの名前を付けるための受け入れられたパターンは既に設定されています;-) MyControlBaseやFooBaseのような "Base"接尾辞が付いています。

-Oyin

+0

それは彼の質問に暗示されていました。彼はC#について質問しています:「javaからC#へ...」 – x0n

2

- ん、なぜ最終的にはAbstractListなど

クラスが抽象的であるかどうかを知る必要があることは重要です。彼らがかなり長くなる前にクラス名に詰め込むことは非常に詳細です。

私は個人的にインターフェイスの「I」プレフィックスを見つけるのはかなり醜いです。そのような細部をクラス名で試してはならないと信じています。私は実装の詳細とインターフェイス名を組み合わせることで、本当に意味のある短い名前が出てくると思います。完璧な例は、JavaのMap、HashMapなどです。すべて非常にディスクリプタで簡潔です。

+1

私はそれがコード構成を簡単にすることがわかりました。あなたのマップの例では、コードを見たりJavaDocsに相談したりせずに、マップsomemap = new Map()が無効で、マップを実装するクラスを探しているはずです。 – Davy8

+0

見つけましたよく知られていないコードベースを理解しようとするときに特に役立ちます。一緒にどのようにフィットするかを感じる方が簡単です。 – Davy8

+0

「Map」という名前から明白なはずですが、それはインターフェイスを記述しており、具体的ではありません。 HashMapの "ハッシュ"はMapを実装する戦略を明確に示しています。インターフェースの命名にコンクリートクラスよりも短い名前がある場合、組み合わせ戦略を使用します。これは完全に... –

1

Iプレフィックスは醜いですが、残念ながらこれはMicrosoftの慣習です。 理想的な世界では、すべてがインターフェイスにプログラミングされている必要があります。具体的なクラスには接尾辞Implなどがあり、インタフェースや抽象クラスと区別することができます(私たちのIoCコンテナは私たちのために扱いますので気にしません)。

本はインターフェースクラスまたは抽象クラスになりますが、実際にはどちらのクラスでも問題ありません。 私たちは、ほとんどの時間、すてきなクリーンな名前にプログラミングされます。使用する実際の実装は、設定ファイルから簡単にプラグイン可能です。

でも、私たちはこのような理想的な世界に住んでいません。

関連する問題