gpt4 book ai didi

c# - 使用现有数据库进行 DDD 实体的 Id 建模

转载 作者:行者123 更新时间:2023-12-04 08:04:59 25 4
gpt4 key购买 nike

正如领域驱动设计中的文献所述,每个实体都由一个 Id 标识,通常是 long/int 或 GUID 类型。我特别关注 Vladimir Khorikov 的类(class) Domain Driven Design in practice .
当我在现有数据库上进行设计时,我该如何处理?
我必须处理我公司 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.


就其他互连域而言,您有一个名为 Order 的实体。
在您的数据订单域中,订单可能是多个数据库表的总和(即订单由客户、产品和商店定义)。要为此创建唯一 id,您可以使用多种技巧。
  • 确实使用最顶层表的 id(不适用于您的情况)
  • 获取复合键值并创建一个哈希集。维护一个包含三元组和哈希集的本地数据库表,并在检索时使用此映射来访问底层 ERP 数据库,而没有人更聪明。
  • 对字符串“value1;value2;value3”中的复合 key 值进行加密,并将加密后的值作为id发送。关于检索、解密和访问底层 ERP 数据库

  • 记住 :领域不是关于内部实现,而是关于沟通和责任。

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

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com