gpt4 book ai didi

design-patterns - DDD - 领域模型中的 CreatedBy/CreatedOn?

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

在为数据库中的每个表按标准编写应用程序时,我具有以下属性:CreatedOn , CreatedBy , ModifiedOn , ModifiedBy , Archived .

但是尝试遵循 DDD 我质疑这些属性是否真的是域的一部分并且应该包含在域对象中。如果我要从域中排除这些“元数据”属性,但仍希望它们在我的数据库中,那么如果我要使用 ORM,我需要实现某种 DTO 层。

所以域模型被映射到一个 DTO,CreatedOn , ModifiedOn等被设置然后推送到数据库。

所以我想我的问题是:

  • 我是否只是将这些属性作为我的域模型的一部分?
  • 我是否删除了它们,但不得不映射 DTO 感到头疼?
  • 是否有替代方案可以消除这两个问题,例如实现某种形式的审计日志?
  • 最佳答案

    在进行领域驱动设计时,您的实体通常与数据库的结构没有太大关系。

    您很快就会发现,无论如何,您都需要在 ORM 的表对象和您的域的聚合之间进行映射。

    将数据库驱动的方面强加到您的域模型中与 DDD 的全部内容相矛盾。

    所以是的,我建议将 ORM 的表对象(无论如何都是纯数据)映射到您的聚合中。这就是存储库模式发挥作用的地方。它将通过转换底层数据来提供域的对象。

    如果创建/修改日期和用户等元数据本质上不是业务域的一部分(即系统范围的日志记录要求),则可以在转换回表对象进行保存时注入(inject)给定的用户和日期/时间。

    分层架构可能如下所示:

     ----------------------------
    | Domain | (Aggregates)
    ----------------------------

    ----------------------------
    | Repositories | (transforms table-objects into Aggregates)
    ----------------------------

    ----------------------------
    | OR-Mapper | (loads records from DB into table-objects)
    ----------------------------

    ----------------------------
    | Database | (this is where the data lives)
    ----------------------------

    关于design-patterns - DDD - 领域模型中的 CreatedBy/CreatedOn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16795061/

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