代码之家  ›  专栏  ›  技术社区  ›  Craig Wilson

域驱动设计-逻辑删除

  •  2
  • Craig Wilson  · 技术社区  · 18 年前

    所以,我建立了一个很好的领域模型。存储库处理数据访问和其他问题。出现了一个新的需求,表明需要记录删除的原因。到目前为止,删除操作相当简单=>实体.Children.Remove(子项)。当我的ORM工具处理状态管理时,没有发生内部更改跟踪。然而,我不知道该如何处理。

    3 回复  |  直到 17 年前
        1
  •  3
  •   Watson    18 年前

    好吧,这听起来很疯狂,我要再试试这个——尽管我可能会因为nHibernate使用不当而被打屁股。在删除之前,为什么不选择要删除的子项(您已经有了正确的ID?),并将其转换为您要使用的实体,以将删除记录到表中。将原因添加到实体并保存它们——然后继续删除。最棒的是,您可以使用一个通用实体,即“auditInfo”作为转换的结果,并且您可以在事务中执行此操作,以便在出现故障时可以回滚所有内容!好吧,也许很疯狂但很有创意,对吧?

        2
  •  1
  •   Watson    18 年前

    你能实施这个计划吗 IInterceptor interface

    example

        3
  •  1
  •   Draemon    18 年前

    如果这会导致不可接受的“过时”行数,我会建议类似于Watson的答案。根据具体要求,您可能可以直接从应用程序的某个地方记录删除的数据和一个额外的“原因”字段。从审计的角度来看,使用拦截器更透明、更令人愉快,但单独的删除日志(表、数据库、文件)可能更简单。