Web开发尤其是互联网相关的基本上需求是不停在增加的,以常用的blog的CURD功能举例;早期功能使用sql简单处理一下就可以了;一段时间后希望用搜索引擎代替数据库,
CUD时需要处理搜索相关的业务了;再过一段时间希望发表博客能够推送朋友动态功能等等;随着新事物、新技术的的兴起都会有新的改变吧;如何设计才能使得主模块的变动最小?
有些功能是不能影响主方法事物,如索引不成功不能使得整个保存过程失败。
解决方法一:代码堆积
Java代码:
public Blog save(Blog blog) {
//索引处理
//推送动态
return blog;
}
解决方法二:aop
这个完全不要更改主要代码模块。
解决方法三:监听机制
实现相应的Lister就可以了。
解决方法四:异步调用(JMS)
目前没有研究过希望有会的可以指导下。
单个方法处理功能太多可能会影响到批量处理,如删除博客的分类,可能需求是同时删除其下所有博文,简单点可以通过sql级联一起删除;但同时还要删除索引等相关信息;总不至于查出分类下所有博文,在调用单个删除方法吧。不知各位有好的设计没,大家一起讨论一下。
CUD时需要处理搜索相关的业务了;再过一段时间希望发表博客能够推送朋友动态功能等等;随着新事物、新技术的的兴起都会有新的改变吧;如何设计才能使得主模块的变动最小?
有些功能是不能影响主方法事物,如索引不成功不能使得整个保存过程失败。
解决方法一:代码堆积
Java代码:
public Blog save(Blog blog) {
//索引处理
//推送动态
return blog;
}
解决方法二:aop
这个完全不要更改主要代码模块。
解决方法三:监听机制
实现相应的Lister就可以了。
解决方法四:异步调用(JMS)
目前没有研究过希望有会的可以指导下。
单个方法处理功能太多可能会影响到批量处理,如删除博客的分类,可能需求是同时删除其下所有博文,简单点可以通过sql级联一起删除;但同时还要删除索引等相关信息;总不至于查出分类下所有博文,在调用单个删除方法吧。不知各位有好的设计没,大家一起讨论一下。
也就是说,整体模型应拆解为两个部分:1、核心业务框架;2、辅助功能框架。核心业务框架是以最小化最高性能为设计目标;辅助功能框架以高可扩展性为设计目标;两者之间借助异步机制实现松耦合。至于删除博文这种事情,技术上不应该真的执行delete这样的动作,而是标志其失效(当然你也可以理解为标志为删除),至于什么时候真的删除,也许晚上用批处理也许永远也不删除(而后者多半是更合理的)。
—— 不太清楚你的业务层和service层之间的差异是什么,基本上只要有一次封装就可以了,封装太多层意义也不大,所以要不要加层的判断依据就是:能否借助该层去透明化什么东西以实现什么好处?◎ 统一缓存管理,我现在也没想好怎么设计,比如论坛系统如果对板块列表做缓存处理,增加、删除帖子时可能清除缓存不止一处,希望通过一定的设计及约束
—— 就缓存管理而言,比较成熟的是MemCache,提供了集群和分布式计算的能力,但你这里还不是这个问题;
—— 缓存关联性失效管理,一般没有很成熟的解决方案,毕竟更多的是应用层面的问题;但有些缓存组件是提供了支持的,比如设置缓存组,如果组内发生更新则全组失效;不过个人感觉不如自己直接控制。
—— 另一种方案是不控制,毕竟缓存本身就有失效时间,如果这种不刷新并不会带来本质问题,那就不刷新好了,等缓存失效自己更新。◎ 尤其很多处理可选方案很多导致很多时候没法敲定下来;这方面的实践有可参考的出处吗?有没有一些开源项目可借鉴的。
—— 开源项目没法帮你解决设计方案的问题,设计师都是摔出来的;
—— CheckStyle和FindBug可以帮你解决一些基础性风格与逻辑问题,整合到Eclipse中用很不错;
—— 当有很多处理方案可选的时候,一般有几个判断过程:
1、是否之前项目用过某种,且用于本次实施没有太大问题?(继承经验是最好的)
2、是否是广泛使用的成熟技术?(大家的成功经验容易转化为你的成功经验)
3、是否简单易用,对使用者技能要求不高?(我们不玩高科技)
4、对环境是否存在严格限制或要求?(轻易别选个技术是FireFox Only的)
至于其它什么“新技术”“超高性能”“超酷”,一般不纳入考虑范围。