2016-03-24 101 views
1

我有繼承鏈中的三類:什麼是繼承鏈中的類的良好命名約定?

AddActorUITests : WebTestBase : IntegrationTestBase 

不過,我會以某種方式希望通過命名約定,從IntegrationTestBaseWebTestBase繼承,使得AddActorUITests開發人員編寫代碼沒有信號檢查WebTestBase驗證它繼承自IntegrationTestBase

有什麼建議嗎?

+1

'WebIntegrationTestBase' - 一個不費腦筋的TBH! – Jamiec

+1

'AddActorUiTests':'WebIntegrationTest':'IntegrationTest'。如果名稱足夠通用,那麼也請刪除'* Base'後綴,那麼您不需要它(並且因爲它是抽象的,所以不能實例化它)。 –

+0

其實沒有任何實際的。通常情況下,繼承的父名會加在/ front後面(比如'Card'和'TarotCard'或'DbContext'和'OracleDbContext'),但並不總是這樣(例如'Animal'和'Cat'或'ActivityBase'和'Sailing'))。 – Ian

回答

4

繼承約爲is-a類之間的關係。繼承應該容易說明,而不必在命名中使用某種約定。

例如,如果您有一個Dog繼承Animal,您不會將其命名爲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 
{ 
    ... 
} 

和當用戶鍵入出WebTestBaseVisual Studio將自動顯示在一個彈出式視窗消息的評論。

+0

太慢了! :-) – Drutten