【问题标题】:Is this a valid way to simplify my inherited classes?这是简化继承类的有效方法吗?
【发布时间】:2011-11-20 04:32:19
【问题描述】:

我有许多包含日期字段并通过跟踪修改的 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 
{

}

这是向字段添加附加信息的有效且明智的方式吗?我在这里问的原因是因为我计划在很多班级都这样做,并且我想确保我做正确的事情。

【问题讨论】:

  • 我不是 100 岁,但总的来说,如果父类的“IS A”类,我会尝试继承。在您的情况下,它们听起来更像是“HAS A”,在这种情况下,我可能会将相关属性分组到一个单独的类中,并在需要此功能的类上公开该属性,即 MyClass 有一个名为 EntityRowInfo 的属性,其中包含您的 ModifiedBy、CreatedBy 属性

标签: c# azure azure-storage azure-table-storage


【解决方案1】:

是的,这是有效且合理的。

如果有任何与 Azure 相关的问题,我无话可说。

关于“IS A”与“HAS A”的评论,我认为在这里可以放心地忽略它。真的,它几乎归结为命名风格。您已将基类命名为 TableServiceEntityRowInfo,因为它是一个 具有 行信息的 TableServiceEntity。如果您将其称为 AuditableTableServiceEntity 会怎样,因为它具有用于审核的字段。现在完全一样了,但是你可以声称每个继承类 "IS A" AuditableTableServiceEntity.

您可能还想将您的基类标记为abstract,以明确它不应该被实例化,只能被继承。

【讨论】:

  • 我很喜欢这个命名和关于摘要的评论。非常感谢。
  • 这将在 Azure 中正常工作,因为您的类继承自的 TableServiceEntity 只是一个非常基本的类,具有 RowKey、PartitionKey 和 Timestamp 属性。
猜你喜欢
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 2011-12-15
  • 1970-01-01
  • 2017-11-10
  • 2023-03-17
相关资源
最近更新 更多