论坛首页 Java企业应用论坛

这样代码重用?

浏览 26207 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-02-12  
我的习惯是这个应用一个SQL 一个方法

可能有一点隐晦,不过的团队就是我一个人-_-!
0 请登录后投票
   发表时间:2007-02-12  
ajoo的同事的做法,我不太喜欢。
这是一种费脑筋、不通用的做法。
0 请登录后投票
   发表时间:2007-02-12  
ajoo 写道
Lucas Lee 写道
你的pair的认真精神还不错,不过我不能同意按他的想法去做。
但不管怎么样,这样深入讨论后,肯定对DRY原则的如何应用,有更深刻的了解。

我觉得你这个例子里,最好的方式是,将SQL里共同的部分拆分出来,作为变量,
如:
String mainSQL="select * from plan where status=1";
String byNameSQL=mainSQL+" and plan_name=xxx";

这样就不会有重复了,又保持了使用SQL。



sql都是存在类似ibatis的xml文件中的。


如果是这样,那的确很难。这从另一个方面说明了存放在XML里这种方式的劣势。
如果这样,干脆保持现状。无论如何,我也不觉得使用JAVA里的算法来替代SQL的findByName语句,就为了什么DRY原则,你在SQL这里是符合DRY了,你在JAVA里大大的违背了DRY了。因为SQL里很简单的事情,你非要用一个不合适宜的JAVA代码实现。
而且,这种方式,如果在方法有增加或者变化的时候(比如增加或变化为like %xxx%, between and,etc.),也是难以扩展的,不是好方式。

BTW,符合任何原则,都要再问自己一下,这么做是否合适?不要为符合什么原则而做。
0 请登录后投票
   发表时间:2007-02-12  
支持重构,如果只是写SQL的话,增加一个内部方法
_getPlansByConditon(String userid, String planName) {
    select * from Plan where userid=#userid#
if (planName != null) {
   and plan_name=#planName#  
}
and status=1  
order by order_num
}

如果你们用的是iBatis那种的,就考虑动态SQL的写法,不知道你们的XML文件的那种是否支持。
0 请登录后投票
   发表时间:2007-02-12  
jianfeng008cn 写道
lane_cn 写道
无伤大雅的小问题,由他好了。
如果plan name不是数据库索引的话,在你的内存里面查和在数据表里面查实际上消耗的时间相差无几。
等他明白了软件应该怎样设计,他自然不会在这种小问题上多费一点脑筋。


“软件应该怎么设计”,你就知道,人家不知道你知道。这个问题小吗,我看还是要看什么样的系统的吧,站着说话不腰疼,大家观点不一致而已,我说你说这话明显是“程序员很普遍的臭毛病”


你说的对,要看什么样的系统。如果是100万条记录,数据库表又已经建立了这个索引,他偏不用,硬要自己去一一遍历,那个差别就大了。
对于一个100行记录的表来说,是自己遍历查询还是交给数据库去遍历查询,根本没什么影响。所以由他去好了,你跟一个程序女工争论这个有啥意思,对你现在开发的系统有好处吗。
0 请登录后投票
   发表时间:2007-02-13  
显然应该重构:
Plan getPlanByName(String userid, String planName){
Plan[] ps= getPlans(userid,planName);
if(ps!=null&& ps.length>=1) return ps[0]
else return null;
}  
Plan[] getPlans(String userid){
return getPlans(userid,null);
}
Plan[] getPlans(String userid, String planName){
String sql=select * from Plan where 1=1;
if(userid!=null) sql+=" and userid="+userid
if(planName!=null) sql+=" and plan_Name"planName

          ....//exec sql
}
0 请登录后投票
   发表时间:2007-02-13  
如果要重构,那样的代码多少写点注释吧。。。。
0 请登录后投票
   发表时间:2007-02-13  
1.代码是写给人看的。
2.除了牛人的代码,费脑子的代码不是好代码。
3.这世上没几个牛人。

0 请登录后投票
   发表时间:2007-02-13  
讲一个在我们某个项目发生过的事情
这个项目是数据密集型的,有很多的批量操作,其操作逻辑和单条操作逻辑很相似,比如批量保存/批量删除等等。
一开始的时候,有若干个熟悉sql但是不怎么熟悉java的人,把大量的逻辑放在存储过程里面,java的若干个层都是简单调用。
这个项目时间很长,做了好几期,过了两三年以后,原来的人都换的差不多了,新的一批人比较熟java但是不怎么熟sql,觉得维护起来很吃力,大家一商量,把其中业务逻辑比较复杂的几个存储过程用java重新实现了一遍。
——————————————

个人觉得在敏捷过程之下,这两种具体的实现方式没什么差别,一开始写成咋样就咋样好了。

我不赞成一有重复代码就开始重构,我认为应当是在“开始出现第三次重复代码”的时候进行重构。






0 请登录后投票
   发表时间:2007-02-14  
后面的代码对数据库的成本高.每次都会改到不需要的数据.

倒不如用前面的代码.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics