EF6模型分离

时间:2018-11-13 11:54:40

标签: c# design-patterns database-design entity-framework-6

我正在尝试让多个程序引用一个通用模型,并且不确定如何正确设计它以供重用。并非所有程序都需要模型的所有部分,但是从源代码控制的角度来看,id希望不要使用不同版本的模型。

我在EF6中创建了一个(简化的)模型,该模型包含以下内容:

Locations
Materials
Formulas

我的业务逻辑可以向公式或位置添加材料:

AddMaterialToLocation(Material material)
AddMaterialToFormula(Material material)

参考程序一需要上述所有条件。它具有一个配方系统和一个仓库,因此它想同时使用以上两个功能。

参考程序2但是只有一个仓库,不需要公式。但是,引用的模型仍然可以。 (程序二完全在不同的数据库/ PC上)

当然,对材料或仓库的任何更改都应作为对通用模型的更新,同时更新两个程序。

我已经考虑过以下几种方式:-

  1. 要使模型作为一个整体连接在一起,但要使程序2不必打扰它不需要的部分。
  2. 将模型分为两部分。有一半具有两个表/实体类(位置/材料),另一半具有(表/材料)。这样,程序2只能创建所需模型的一部分。
  3. 将模型分为三部分,每个表/类一个。每个程序都有单独构建的部分并仅使用基本类型在它们之间传递/转换吗?
    AddMaterialToLocation(int MaterialCode, string MaterialName)

无论如何,引用应用程序都将在Presenter中建立自己的视图模型,因此将较小的块连接在一起就可以了。

上述解决方案似乎具有以下缺点:-


选项1-最终将为程序2创建许多未使用的实体。
选项2-将具有两个相同的Material实体(也将是相同的db表)
选项3-会有很多edmx。什么都不会链接-id宽松的导航属性等。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

每个问题域都有自己的解决方案空间,并且具有特定的业务模型。

当您尝试为程序一创建模型时,它具有定义中已不存在的自己的模型(选项1的缺点)。

为什么要在计算机和数据库中将两个程序完全分开时相互依赖两个程序?

也许以后您想对程序一进行任何更改,而这在程序二中是没有必要的,这会给您带来复杂性!

但是,如果您的通用模型对两个程序具有相同的数据(共享数据),则可以对通用模型使用诸如Microservice之类的解决方案。(我不知道您的程序详细信息)