最近要求实现Audit Trail Framework ,简单的说就是记录业务数据的修改,以便以后查询谁,在什么时候,做了什么的修改。比如,Supplier 有个属性叫做Name, 如果一个用户 A 于今天2 点将一个Supplier sp1 的Name 从a 改成b, 那么就要记下来该用户A 在今天2 点将Supplier sp1 的Name 属性从 a 改成了b 。
业务中将这些修改称作Amend Log ,针对某个业务对象,可查看其Amend Logs ,如对某个Supplier ,其展示给用户的显示模式如下:
Action | Data Key | From | To | Remark |
Modify | Name | name1 | name2 |
|
Add Supplier Type | Supplier Type |
| Depot |
|
Remove Supplier Type | Supplir Type | Facility |
|
|
Add Contact | Main - person name1 |
| Purpose:Main Address1: nanjin XXX ... |
|
Modify Contact | Main - person name2 | Purpose:Main Address: nanjin XXX ... | Purpose:Main Address: nanjin XXX ... |
|
在这里先介绍一下该例子中的业务Supplier 的领域模型,其类图如下:
以上的例子算是比较简单的了,在项目中通常一个业务实体有很复杂的关联,比如 Order->ChargeSummary->ChargeDetail 下的 Amount 属性改变了,从 Order 的 Amend Log 列表中可以查询出 Amount 的属性的变化。
需要实现的 Audit Trail Framework 要求以非侵入式的方式集成到应用系统中去,即业务逻辑不需要与 Audit Trail 耦合,并且以最简单的配置来实现对关系的业务数据的监控 , 简单非常重要,并且易于维护,如果使用者不够简单的配置,不能方便的维护,则对项目的维护成本很大。
将如何设计呢?