c# - EF6 模型分离
问题描述
我试图让多个程序引用一个通用模型,但不确定如何正确设计它以供重用。并非所有程序都需要模型的所有部分,但从源代码控制的角度来看,id 不希望拥有不同版本的模型。
我在 EF6 中创建了一个(简化的)模型,其中包含以下内容:
Locations
Materials
Formulas
我的业务逻辑可以将材料添加到公式或位置:
AddMaterialToLocation(Material material)
AddMaterialToFormula(Material material)
引用程序一需要以上所有内容。它有一个配方系统和一个仓库,所以它想同时使用上述两个功能。
然而引用程序二只有一个仓库,它不需要公式。然而,参考模型仍然存在。(程序二完全在不同的数据库/PC上)
当然,材料或仓储的任何更改都应作为通用模型的更新应用,同时更新两个程序。
我已经研究过以下方式: -
- 将模型全部连接在一起,但让程序二不费心去调用它不需要的部分。
- 将模型分成两部分。一半有两个表/实体类(位置/材料),另一半有(公式/材料)。这允许程序二只创建它需要的模型部分。
- 将模型分成三部分,每个表/类一个。每个程序是否单独构建零件并仅使用基本类型在它们之间传递/转换?
AddMaterialToLocation(int MaterialCode, string MaterialName)
无论如何,引用应用程序都将在演示者中建立自己的视图模型,因此在之后将较小的部分附加在一起就可以了。
上述解决方案似乎提出了以下缺点:-
选项 1 - 最终会为程序 2 创建大量未使用的实体。
选项 2 - 将有两个相同的材料实体(这也将是相同的数据库表)
选项 3 - 将有很多 edmx。没有任何东西会被链接 - id 松散的导航属性等。
有没有更好的办法?
解决方案
每个问题域都有自己的解决方案空间,并有其特定的业务模型。
当您尝试为程序一创建模型时,它有自己的模型,该模型不再存在于其定义中(选项 1 的缺点)。
当两个程序在机器和数据库中完全分离时,为什么要相互依赖?
也许稍后您想对程序一应用任何在程序二中不必要的更改,这会给您带来复杂性!
但是如果您的通用模型对两个程序有相同的数据(共享数据),您可以使用一些解决方案,例如微服务用于通用模型。(我不知道您的程序详细信息)
推荐阅读
- java - 带有 JOptionpane GUI 和 elseif 值的 Java
- python - 随机森林特征重要性与相关矩阵
- django - 在 GCP App Engine 上为 Django 部署指定设置文件
- firebase - 如何显式设置新创建的 GeoFireStore 文档的 ID?
- javascript - React 中的蓝色下划线文本 - 文本装饰:无;(和颜色)不起作用
- javascript - 如何在 jS 上使用类别循环
- python - 如何通过*(Python)“加入”部分隐藏的数字
- r - 使用 R,如何将用逗号分隔的数据分解为单独的行?
- java - 从 JSONObjects 的 JSONArray 中删除除一个之外的所有元素
- sql - DB2 SQL 捕获日期格式错误