c# - DDD实体的Id与现有数据库建模

标签 c# asp.net entity-framework domain-driven-design clean-architecture

正如领域驱动设计中的文献所述,每个实体都由 Id 标识,通常为 long/int 或 GUID 类型。我特别关注了 Vladimir Khorikov Domain Driven Design in practice 的类(class)。 。 当我在现有数据库上进行设计时,如何处理这个问题?

我必须处理公司 ERP 中的表,因此我无法触摸它们、修改或忽略它们,我必须在此持久层之上对我的实体进行建模。 几乎所有表都没有整数标识符,而是各种类型的字段集。 如何将带有 Id 的实体的“整洁”概念与其在没有整数 Id 的数据库中的持久性联系起来?

最佳答案

您正在将实体视为数据库表。这在 DDD 中不一定是真的,因为在代码 Repositories 中也不是这样。

您从域中公开的实体应该遵循 following definition :

An object that is not defined by its attributes, but rather by a thread of continuity and its identity.

就其他互连域而言,您有一个名为“订单”的实体。

在您的数据订单域中,订单可以是多个数据库表的总和(即订单由客户、产品和商店定义)。要为此创建一个唯一的 ID,您可以使用多种技巧。

  1. 确实使用最顶层表格的 ID(不适用于您的情况)
  2. 获取复合键值并创建哈希集。维护一个包含三元组和哈希集的本地数据库表,并在检索时使用此映射来访问底层 ERP 数据库,而无需任何明智的操作。
  3. 加密字符串“value1;value2;value3”中的复合 key 值,并将加密值作为 id 发送。关于检索、解密和访问底层 ERP 数据库

记住:域与内部实现无关,而是与沟通和责任有关。

关于c# - DDD实体的Id与现有数据库建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66259210/

相关文章:

javascript - 如何使用 angularjs 根据各个单元格数据更改表格行的背景颜色?

c# - 在 ASP.net MVC 中使用 EF 对象的设计注意事项

c# - 正则表达式 C#

c# - 避免继承 JsonConverter 递归

asp.net - 在 ViewState 或 Session State 中存储 DataSet

asp.net - *不*使用 asp.net 成员(member)资格提供程序是一个坏主意吗?

c# - 对象内对象的 Entity Framework LINQ 表达式

c# - 如何递归地包含所有可导航属性以模拟延迟加载

c# - 如何根据条件设置链接按钮的状态?

c# - 如何使用反射获取属性值