帮助为我的类创建一个基本界面

时间:2011-06-26 11:48:58

标签: c# polymorphism

我想为我的所有业务实体创建一个接口或基类(不确定我想要这条路线)。对于每个业务实体,我需要以下内容:

  • Id - 实体的主键
  • 类型 - 实体的类型,例如用户,只是一个字符串
  • 名称 - 实体名称,例如约翰·多伊
  • 描述 - 实体的简短描述,例如高级程序员
  • CreatedDate - 创建实体的日期
  • ModifiedDate - 修改实体的日期

所有类都支持单个主键。

我的大多数课程都有这些字段,但在大多数情况下,主键是UserId。

我想在我的业务实体中创建一些共性的原因之一是我希望实现一个搜索函数,该函数返回IEntity(或实体类,如果利用继承)对象的列表。

我的问题是......

  • 利用接口而不是基类是更正确的方法吗?
  • 如果我创建这个作为接口,我应该保持属性简单,例如Id和Name ...这将使我必须对每个属性实现进行编码最小化,或者最好将“实体”附加到每个专有名称,以便更容易使用业务实体,例如MyEntity.EntityId与MyEntity.EntityId相对应

我意识到这可能被认为是主观的,但我真的需要得到一些指导,所以任何想法都不会如此主观,我们将非常感激。

提前致谢!

3 个答案:

答案 0 :(得分:2)

在我看来......

如果你的类要对它们的某些方法有一些共同的实现,那么基类就更有意义了。因为您无法在接口内部实现,并且您要实现接口,所以您在多个类中具有相同的通用实现,而不是单个基类。

我认为将“实体”附加到每个属性是毫无意义的。您已经暗示它是实体对象的名称或其基础类型的实体属性。我说避免冗余并保持简单。

答案 1 :(得分:1)

在我看来,如果你想让很多对象拥有这个功能,你应该不惜一切代价避免基类继承。一旦你决定从某个基类继承你项目中的所有类,就很难回头。请记住,C#只允许您进行单继承。

更好的解决方案可能是实现一个接口,该接口允许类为可能对这些数据感兴趣的任何人指定属性。

避免基类分类的另一个原因是,如果你对此感兴趣,那么单元测试会更难。在不影响应用程序的许多方面的情况下,也很难改变自定义行为。

简而言之,您可以做的是拥有一些您已经清楚地认识到需要该接口实现该接口的对象,并让另一个管理类型类从这些其他类请求该信息,并且是您之间的适配器或网关模块化,单一用途的对象和数据库(或类似的东西)。

希望我已经让自己清楚了。

答案 2 :(得分:1)

考虑将业务数据作为隔离类保留在数据访问层中是否更好,并在表示层中提供常用的包装,它提供您正在考虑的常见功能集。也许你的解决方案不够复杂,不足以保证一个完整的架构 - 我相信很多人会不同意 - 但我觉得让你的应用程序分层是一个很好的方法。这意味着数据访问类可以分离,避免在此层完全避免难题,并且表示类只显示您实际需要的功能 - 但是采取您选择的任何继承制度。我的理由是,以这种方式考虑问题可能会使决策更容易。