2011-11-20 25 views
7

我有很多Azure類包含日期的字段和通過跟蹤修改。如字段:這是一種簡化我的繼承類的有效方法嗎?

[DisplayName("Created By")] 
public string CreatedBy { get; set; } 
[DisplayName("Modified By")] 
public string ModifiedBy { get; set; } 

我想避免重複,所以我正在考慮創建一個類來包含這些像這樣:

public class TableServiceEntityRowInfo : TableServiceEntity 
{ 
    [DisplayName("Created By")] 
    public string CreatedBy { get; set; } 
    [DisplayName("Modified By")] 
    public string ModifiedBy { get; set; } 
} 

對於我的數據類,然後,而不是讓他們從TableServiceEntity我繼承想要設置如下:

public class MyClass : TableServiceEntityRowInfo 
{ 

} 

這是一個有效和明智的方式來添加額外的信息到字段。我在這裏問的原因是因爲我打算對很多班做這個,我想確保我做的是正確的事情。

+0

我不是100,但一般來說,如果父類的「IS A」,我嘗試繼承。在你的情況下,它們聽起來更像是一個「HAS」,在這種情況下,我可能會將相關屬性分組爲一個單獨的類,並在需要此功能的類上公開該屬性,即MyClass具有一個名爲EntityRowInfo的屬性,其中包含ModifiedBy,CreatedBy屬性 – dreza

回答

8

是的,這是有效和合理的。

如果有任何Azure特定的問題,我不能說那個。

至於「IS A」與「HAS A」的評論,我認爲這裏可以放心忽略。真的,它幾乎歸結爲命名風格。您已將您的基本類別命名爲TableServiceEntityRowInfo,因爲它是TableServiceEntity,即具有行信息。如果您將其稱爲AuditableTableServiceEntity,那麼它會包含審覈字段。現在它完全一樣,但你可以聲稱每個繼承類「IS A」AuditableTableServiceEntity

您可能還想標記您的基類爲abstract要清楚,它不應該實例化,只能繼承。

+0

我非常喜歡這個命名和關於抽象的評論。非常感謝。 –

+0

這將在Azure中正常工作,因爲您的類繼承的TableServiceEntity只是具有RowKey,PartitionKey和Timestamp屬性的非常基本的類。 – knightpfhor

相關問題