使用分部类向EF实体添加功能是不好的做法吗?

guh*_*hou 8 entity-framework mvvm

我正在使用MVVM模式构建一个小型计时应用程序,使用实体框架进行持久化.在这个阶段,我的逻辑很薄,因为我只需要对相关数据执行一些计算和聚合.目前,我已经通过在实体类的部分类中编写它们来实现这些.

例如:

// entity framework generated
partial class Lap {
  int Id { /* boilerplate */ }
  DateTime StartTime { /* etc */ }
  DateTime EndTime { /* etc */ }
}

// in my partial class (written by me)
partial class Lap {
  TimeSpan Duration {
    get { return EndTime - StartTime; }
  }
}
Run Code Online (Sandbox Code Playgroud)

将额外的逻辑直接放到实体生成的类上是不好的做法吗?我应该为这个逻辑创建另一个域层吗?

kbr*_*ton 10

你正在做的是设计部分类的东西; 将相关逻辑添加到代码生成的类中,而不会使继承树陷入困境.保持.

加成:

从所有部落知识字体的页面,维基百科(重点补充):

部分类的目的是允许类的定义跨越多个文件.它特别适用于:

  • 非常大的类(通过单个文件使用编辑器导航很麻烦)
  • 以与面向方面的编程类似的方式分离关注点,但不使用任何额外的工具.一个例子如下所示.
  • 允许多个开发人员同时处理单个类,而无需稍后在源代码管理中合并文件.
  • 允许类接口和与实现相关的定义之间的分离(公共和私有部分的单独定义)
  • 简化代码生成器的编写,例如可视化设计器.这可能是最有用的原因.开发代码生成器是一项挑战,这些代码生成器可以在将生成的代码放入人工编写的代码中时对其进行管理:
    • 需要大量解析不必要的代码,只是为了找到插入生成的代码的地方.改变代码也是一个问题.写得不好的生成器可能会损坏整个文件.

使用部分类,代码生成器处理单独的文件,从而减轻了所有上述问题.