糟糕的设计

       不要去弄脏构造器方法!

                         ---------------2009-02-24

 

        这是来自自己最近的项目Salesys的一个经验之一。坦白说,在这个项目,还有以前的几个项目中糟糕的设计有很多,这个只是其中之一。

        在Salesys的一个很大的特点就是大部分的模块在开始页面都有一个信息列表,用于显示这个模块的主要信息。就像这样:

 信息列表

       在我们的代码设计中(其实根本就没进行设计),这个信息列表是保存在一个 list中的。很自然的,我们会在backing bean 里面为这个属性写构造器方法。顺便说一下,Salesys 是JFS+EJB架构的。现在的问题是我们要去调用EJB里面的方法来从DB读取这些数据。接下来自己做了一个很业余的决定,改写get方法,让get方法来调用EJB,而忘了用户触发这个事件的方法。

        而这个该死的决定带来的后果是:当我们要分页显示这些数据时,程序每次都去读数据库,到后来程序就会变的很慢很慢。更该死的是我们在所有模块都快写完的时候才发现这个问题。于是我们采取了一个补救措施,在get方法里面加一个判断,当list 等于null的时候才去读数据库。

        我们以为问题解决了,而忘了还要做那些该死的添加,删除,编辑等操作。就这样新的问题来了,当我们向DB添加了一条数据的时候,并不会在这个信息列表里面显示出来。因为我们的list不为null。于是我们又去修改我们的添加,删除,编辑等方法。  等到业务上的方法加进来的时候,我们又发现我们的get方法还不够用,于是又加了写代码进去。

        经过不停的给代码打补丁,程序终于能正确的显示页面了。但是已经不那么稳定了,代码的意图也很难看懂了。

        后来我不断的问自己,为什么当时不在响应用户操作的方法中来读写DB,而让构造器方法只有一行代码呢。这样代码的意图不是很清楚,程序不是更稳定?     

     

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值