2016-03-24 6 views
1

私は、継承チェーンの三つのクラスがあります:私は何とかIntegrationTestBaseからWebTestBase継承があることを確認するためにWebTestBaseを確認する必要はありませんAddActorUITestsにおける開発者のコ​​ードを書くようにという命名規則によって合図したいしかし継承チェーンのクラスに適した命名規則は何ですか?

AddActorUITests : WebTestBase : IntegrationTestBase 

をそれはIntegrationTestBaseから継承されます。

提案がありますか?

+1

'WebIntegrationTestBase' - あまりにも単純なTBH! – Jamiec

+1

'AddActorUiTests':' WebIntegrationTest': 'IntegrationTest'です。もし名前が十分に一般的で、それが必要でないなら(そして抽象的であるためインスタンス化することはできません)、 '* Base'接尾辞を削除してください。 –

+0

実際には実際にはありません。通常、継承はその親の名前を(例えば 'Card'や' TarotCard'や 'DbContext'や' OracleDbContext'のように)/ frontの後ろに追加しますが、常にそうであるとは限りません(例えばAnimal'や 'Cat'や' ActivityBase'や「セーリング」))。 – Ian

答えて

4

継承はクラス間の約is-aの関係です。継承は命名規則のなんらかの種類を使わなくても簡単に伝えるべきです。

たとえば、を継承するDogがある場合、その名前はDogAnimalではありません。犬が何であるかを理解することはすでに簡単です。他の観点から見てみましょう。 Dogクラスに対してコードを書くときに、それが名前に示す必要があるのはAnimalであることを知ることがなぜ重要なのでしょうか?ハンガリー表記は理由があるため放棄されました。

この表記がまだ必要な場合は、継承をツールボックスとして使用しないでください。つまり、サブクラスにいくつかの素晴らしい機能を追加するために継承を行うだけですか?その場合、作曲を使う方がはるかに優れています。

+0

はい、継承上の構成!しかし、私は静的および非静的なプロパティとヘルパーメソッドを持つ巨大なセットアップを持っています。私はコンポジションをもっとやろうとしていますが、私のセットアップでは必ずしも可能ではありません。 – Drutten

+0

私のコードベースを完全にリファクタリングしました!今はコンポジションですが、私はまだこの継承チェーンを持っています。 – Drutten

+0

あなたの桜を選んだ例では、実際には必要ありません。しかし、より具体的な 'Component'、' ContainerComponent'などの何かを考案するには、 'ContainerComponent'が' Component'の特殊化であることを知るために、*それは名前の後ろに続く*共通です。 – Jamiec

1

Visual Studioを使用している場合は、コメントを使用できますか?

/// <summary> 
/// Inherit <see cref="IntegrationTestBase"> class 
/// </summary> 
class WebTestBase : IntegrationTestBase 
{ 
    ... 
} 

WebTestBaseアウトユーザーの種類、 Visual Studio意志自動ショー飛び出しメッセージでコメント。

+0

これは遅すぎます! :-) – Drutten

関連する問題