2009-04-23 33 views
0

前言:如何命名純虛保護財產

我有一個組件,讓我們把它叫做IVIEW。這個組件由BaseView類實現,它保存了它的大部分功能。我們使用模板模式將邏輯委託給嵌入類。

問題:

我們有一個名爲IView.Visible屬性,它指示組件應該或不可見。此屬性是不是虛擬,因爲它涉及我們的BaseView中的一些邏輯。

我們已經創建了一個虛擬的保護方法ISVISIBLE這是從BaseView.Visible調用來決定IView.Visible的最終值。

我們覺得這個屬性名稱IsVisible對派生類的實現者來說是不夠描述和清晰的。

有人建議將它重命名爲ShouldBeVisible,但我們仍然填寫有更好的名稱。

您認爲如何?你有更好的名字嗎?是否有一個很好的命名約定涵蓋了模板方法的這個主題?


更新:我只想澄清一點,可見和可見性屬性沒有在組件上的副作用,Visible屬性使用從ISVISIBLE值來決定是否可見的值應該是真實的,但它不是唯一的考慮因素,也不是組成部分的其他內部狀態的最後結論。

回答

1

我從來沒有對這個命名約定特別敏銳,但Framework Design Guidelines書提出「核心」的使用爲後綴這種類型的模式。此代碼是從微軟的System.Windows.Forms.Control類採取

public bool CanSelect 
{ 
    get 
    { 
     return this.CanSelectCore(); 
    } 
} 

internal virtual bool CanSelectCore() 
{ 
    ... 
} 

我的這個解決方案關注的是,你暴露的未知與可能的副作用爲屬性的複雜性的方法,但因爲你可以翻找通過.NET框架代碼,看到這個約定經常被使用,如果你正在尋找一個標準,這個標準可能就像你會得到的一樣。

0

在這個問題中沒有「正確」或「錯誤」,只有「更好」或「更壞」。

就我個人而言,我會使屬性,「涉及一些邏輯」一種方法GetVisible(),以清楚地表明有一些邏輯(即使它很簡單,它可能是屬性)。

持有該信息的財產可能只是可見的。

這就像不同的成員都理解:屬性是數據(或數據的錯覺)和方法是邏輯。

0

基類是實現屬性還是打算由繼承類實現,即它是抽象的嗎?我的第一個想法是,它應該被命名爲它將在繼承類。如果它控制類輸出是否可見,那麼Visible看起來是正確的名稱。至少在我看來,這個名字不應該反映實現而是目的。

+0

繼承類是爲了實現IsVisible屬性,它不公開,但受保護。問題是關於IsVisible,它與Visible的關係。 – 2009-04-23 15:02:01

0

我認爲「虛擬保護」確實足以達到目的,它已經指定它可以並將在某個時間被覆蓋,並且它被子類訪問。

命名不應該太大才能一次又一次地編碼,IsVisible也是標準的命名方式。它也應該屬於正確的英語。 ShouldBeVisible聽起來像是某種條件/驗證,而不是屬性。

成員的名字只應描述目的,而不是邏輯或技術細節太多,只會使名字變得越來越大。

0

由於考慮的方法是Visible的繼承類的實現,所以如果必須,我會使用可怕的醜陋但非常具有描述性的名稱VisibleImplementation或VisibleImpl。它使開發人員非常清楚,這是他實現其組件可見或不可見的邏輯的地方。

protected bool VisibleImplementation() { ... } 

另外,你可以給它同名Visible,並要求它帶一個布爾參數,指示它是否從基本實現中調用。就我個人而言,我不喜歡引入參數來區分方法,但有時您必須做出妥協。

protected bool Visible(boolean fromBase) { ... }