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 对象来通过反射方式分析所有的属性。
? ? ? ? 写了这么一大堆, 只是为了让自己更清楚点。 先暂时这样, 这段时间就要耗在上面了,囧。