日期:2014-05-19  浏览次数:20702 次

稍大点的程序中,如何在模块间传递消息
一个程序分几个模块:
1、用户管理。
2、操作管理。
3、角色管理。

我新建了一个角色,给角色指定了可选的操作和用户。
那么在删除角色的时候,角色-用户表、角色-操作表的记录应该也被删除。

第一种办法是在角色模块中,删除角色的方法里,主动删除角色-用户,角色-操作数据,但是随着业务系统增大,删除或者更新一个实体的时候,会有N多事情要处理,这些处理的代码写在同一个模块里,或者在一个模块里分别去调用不同的模块的服务,
很快就把代码质量写下来了。

第二种办法是使用数据库的级联删除设置。这种办法不太好的地方是,没有机会写代码来处理角色、用户删除之前的预处理过程。

第三种办法是使用JMS,发消息,以后各模块大家各自管各自的代码,有新业务需求或变更的时候,只要关注新的消息或者修改旧消息的处理过程就可以了。

第四种:有没有比JMS轻量一点的工具,都是同一个程序的不同模块,用JMS感觉稍有笨重。

------解决方案--------------------
系统内的模块和模块之间,仍然以值对象传输为主,否则代价显得较为昂贵了。

你的例子中,都属于权限管理范畴,甚至都不应该分成多个模块来设计,只能说是一个模块中的几种功能;切分太过于清晰,个人认为属于“过度设计”,模块内本来就是以紧耦合为主,否则你保证事务一致性都难。

所以在你的例子中,应该是从数据访问组件或者说DaoManager中,去完成这种存在关联关系实体的处理。



用JMS实在不可取,你怎么保证事务一致性?万一删了某个结果另一个和删除失败了你咋整?