具有共享某些属性的对象的模型的接口与抽象类

时间:2014-05-28 08:48:22

标签: c# .net oop interface abstract-class

我的申请主要由广告系列组成。它们是我模型的主要对象。 我有两种类型的广告系列:

  1. Ad hoc :立即投放一次的广告系列
  2. 预定:计划未来的广告系列,可根据其日程安排多次投放。
  3. 这两者之间存在共享属性,并且存在特定于每个属性的属性。设计此数据模型的最佳方法是什么? InterfacesAbstract classes

    我们假设两种类型的广告系列都可以包含 Id 名称,并且:

    • 只有Ad hoc广告系列才有DataTable名为收件人
    • 仅有预定广告系列的List<DateTime>名为日程表

    如果您非常友好,不要对我投反对票或要求关闭此问题,请提供您推荐型号的基本结构,包括access modifiersabstract/virtual或其他关键字帮助我为我的模型提供更好的结构。

2 个答案:

答案 0 :(得分:2)

如果没有很好地理解你正在做的事情,很难回答这个问题,而且不幸的是基于意见。

然而,在非常简单的层面上,如果使用接口,则通常必须在实现属性(方法,属性等)之间复制代码。基类为它们提供此功能。出于这个原因,我经常使用基类,除非接口更合适的具体原因。

我建议不同类型的广告系列本质上都是广告系列,因此有一个基类。然而,他们将针对不同的实体(人,慈善机构,公司),这些实体都需要联系他们的方式(电子邮件/电话/地址)我建议这些不相关的实体(超出他们可以成为竞选对象的事实) )是何时使用接口的更好例子。

但是,您需要考虑要覆盖哪些方法以及哪种方法更清晰。

答案 1 :(得分:1)

一般来说,如果他们共享共同的行为(代码),那么该代码应该存在于抽象类中。如果他们执行相同的角色,请将它们放在界面后面。

在你的情况下,你似乎有两个共享属性,这两个属性都是一个简单的值,它并没有真正定义行为,所以只是基于那些我只想用于接口的属性。

如果您决定创建一个抽象类(可能有两种类型的代码都要共享),您仍然可以保留该接口。有一天,您可能会有第三种不与其他类型共享行为的广告系列类型(因此不会实现相同的抽象类),但会执行相同的角色(因此实现相同的界面)。

对于抽象类中的访问修饰符,如果两个类只共享两个属性,则只需在没有abstractvirtual关键字的抽象类中定义它们。