IEditableObject的复杂实现

本文关键字:实现 复杂 IEditableObject | 更新日期: 2023-09-27 18:17:32

我正在寻找一个支持脏数据跟踪的IEditableObject实现,它不仅可以用于具有ValueType(原始)属性的单个对象,还可以用于可能包含引用和集合属性的整个对象图。如果没有这样的实现,你会提供一些指导方针或提示,因为我需要这个快?

IEditableObject的复杂实现

我看到了几个可能的解决方案:

  • 找到一个支持此功能的组件套件(我见过构建在DevExpress套件之上的框架这样做,但不确定它是否被烤进去)
  • 找到一个代码生成器来帮助减少你需要编写的样板代码(NuGet可能是一个很好的开始)。
  • 使用PostSharp注入代码来处理问题(或其他AOP工具)
  • 将所有数据包装在Transactional中并使用VolatileTransactionManager (IDesign已在其网站上发布了此解决方案的代码,但我会担心性能)
  • 使您的数据结构具有深度可克隆性,并且在提交更改之前一直在克隆上工作。这个解决方案可能是最容易编写和调试的。像fasterreflect这样的库包含了深度克隆对象图的扩展,或者您可以简单地序列化/反序列化来生成副本。

选项,选择!