需求:
有好几个功能模块都需要审核的功能。
例如:
在功能模块A中填写了表单,并保存提交了,待审核过后才能有效。
在功能模块B中同样如此
在功能模块C中同样也是如此
这些都需要在审核功能模块审核通过后方能生效。
分析问题:
或许一拿到这样的需求,设计的时候都会在数据库表中增加一个状态字段来表示审核成功还是失败。如果这样做的话,那么审核的时候,必须选择功能模块类型,然后查询相应需要审核的记录,进行审核,如果不选择审核类型进行查询而是查询所有审核信息,则要遍历多张表。再增加一个功能模块的时候,要在审核这里再做修改。相当于审核的功能都渗透到其他功能模块中去了,一旦需求变更的时候,修改就比较多,模块之间依赖程度太高。
提出问题,解决问题:
增加表字段的方法可以解决问题,但感觉不是很好。应该把审核的功能独立出来,可以设计一张审核表,审核的信息只从审核表中查询,待审核通过后,将数据插入到相应的功能模块x表中。
问题1:各个不同模块的内容怎么在一张审核表中进行存储,审核的时候怎么查看 ?
在各种模块中,提交的时候,将po转换成二进制流存储在数据库中,该字段设置成大字段类型 blog(mysql),只需要审核表定义一个这样的字段就可以存储各个不同模块的数据。
问题2:查看各模块的详细信息并修改,怎么处理?
查询详细的时候,可以通过审核id在审核的Controller层获取到审核具体的内容,问题是,获取到内容后怎么跳转到相应功能模块的详细页面,不同的功能有不同的详细页面。
我们得有一个数据类型,通过数据类型来判断是哪个功能模块,然后在配置文件中配置相应的url,在审核控制层进行读取配置文件进行跳转就ok了。
例如:
audit.detail.1=bbsdetail.do // 跳转到bbsdetail.do
audit.detail.2=newsdetail.do // 跳转到newsdetail.do
第三个参数是数据类型1=bbs,2=news
修改信息的时候:
修改的时候应该跟查询一样
audit.modify.1=bbsmodify.do // 跳转到bbsmodify
audit.modify.2=newsmodify.do //跳转到newsmodify
第三个参数是数据类型1=bbs,2=news
问题3: 审核通过之后,实际功能模块的信息怎么入库?
审核通过后:
在审核模块中取到具体po后将二进制流还原成po,原来的po重生了,通过配置文件取到各个模块的service,进入相应的模块的service层的方法进行处理即可。
怎么跳?
在配置文件中配置:
audit.dealService.1=bbsService
audit.dealService.2=newsService
第三个参数是数据类型
audit.auditmethod.1.1 = addbbs
audit.auditmethod.1.2 = addnews
第三个参数是操作类型1=add,2=modify
第四个参数是数据类型1=bbs,2=news
整个思路流程到此为止。
用的技术点:
1、序列化,输入/输出流: 将po对象转换成二进制流并保存起来,将二进制流还原成对象。
Serializable串行化,输入输出流 可参考 http://blog.csdn.net/hbcui1984/archive/2007/04/02/1549290.aspx
2、反射: 得到对象实例xxxService,知道方法名称。
Method method = service.getClass().getMethod(dealmethod, new Class[]{obj.getClass()});
Object result = method.invoke(service, obj);
分享到:
相关推荐
1.public class Person implements Serializable { 2. ... 22. private String name = null; 23. 24. transient private Integer age = null; //另外Integer类型的成员变量也是序列化时不考虑...
序列化 serializable demo ! 序列化 serializable demo !
說明如何將Serializable物件轉成stream
主要介绍了java 对象输入输出流读写文件的操作实例的相关资料,这里使用实现Serializable接口,需要的朋友可以参考下
Serializable的增删改查操作,已经经过验证,可以直接运行。
java->serializable深入了解 java->serializable深入了解 java->serializable深入了解
Laravel开发-serializable-values Luminark可序列化值包。
Java_Serializable(序列化) 的理解和总结
Intent传递数据是android开发中最长用的数据传递方式,可是要传递对象不怎么常用,这里介绍第一种传递对象的方法Serializable传递
java.io.Serializable序列化问题
详细讲解了C#中关于对象序列化的知识,包括基本序列化、选择序列化、自定义序列化;对于了解在C#中如何进行对象的序列化有价值
bundle传递基本数据,Parcelable类型数据,Serializable类型数据
Android序列化——Serializable与Parcelable
java 序列化 对象 Serializable 写着玩的Demo 简单 实用
java 将对象序列化 输出对象的值,不懂可以百度序列化干啥的,为什么要用序列化,好处。
Android中的Serializable
Java 中 Serializable的应用,序列化的作用说明
[Serializable]在C_中的作用-NET_中的对象序列化,希望有所帮助
DataInputStream 数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。 DataOutputStream 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。 File 文件和目录路径名...
NULL 博文链接:https://tony-lee-s.iteye.com/blog/1416044