Case: 怎样捕捉针对domain 对象的批量修改的请求
从题目上看到这是一个很奇怪的需要。 具体说来现在有一组domain 对象, 它们是用来表示各种规则的。 总共有大约10类这些对象, 每一种对象又分为不同层次的, 不同复杂度。 现在有一个需求, 客户想针对某一类domain 对象, 想批量的修改它们的属性, 这些属性的修改是比较复杂的,需要在UI 上面设定。 在用户提交save 请求后 系统记录下所有的修改请求。 可能涉及到多个domain 对象的属性的增加、修改或者删除。
系统中一个MDB 类型的EJB 取得这个request, 然后分析出所有domain 的增加、修改或者删除, 执行具体的相应的操作。 如果针对某一个domain 对象的操作失败 并不会影响别的domain 对象的修改, 系统只是记录下该失败的domain 的操作供反馈给用户。
说了一大堆, 问题出来了, 怎么保持这个临时的request的内容。 按照本人已经其他开发人员的意思将这个请求的内容 序列化, 如果担心二进制的序列化难以debug, 可以将其marshal 成 XML string, 保存到CLOB类型的字段中。 这样就是一个典型的key/value 的形式。
但是现在客户坚决反对这种方式 提出了采用动态表的方式。 主要涉及到两张表 item 表记录需要改变的 domain 对象 ,类型: 增加 , 修改, 删除, 以及domain对象的 key; 另外一张item detail 表 记录domain 对象的每一个需要改变的属性。主要记录改变后属性的值。 当然如果domain 里的属性如果是另外一个domain, 就需要涉及到另外一个item , 这个属性对应的item的 parent 是原来的那个domain 对应的item。 系统中一大堆的domain 对象 总共5,60个, 如果每个这么手工match 非要疯掉不可。 现在想到一个主意 前期已经有每一个domain 对象到 数据库表的 Hibernate ORM mapping 文件。 可以通过分析这些mapping 文件 得到每个domain 中的属性 对应表字段的对应关系, 然后根据前台传过来的 domain 对象来通过反射方式分析所有的属性。
写了这么一大堆, 只是为了让自己更清楚点。 先暂时这样, 这段时间就要耗在上面了,囧。