锁定老帖子 主题:这样代码重用?
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-02-12
我的习惯是这个应用一个SQL 一个方法
可能有一点隐晦,不过的团队就是我一个人-_-! |
|
返回顶楼 | |
发表时间:2007-02-12
ajoo的同事的做法,我不太喜欢。
这是一种费脑筋、不通用的做法。 |
|
返回顶楼 | |
发表时间: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,符合任何原则,都要再问自己一下,这么做是否合适?不要为符合什么原则而做。 |
|
返回顶楼 | |
发表时间: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文件的那种是否支持。 |
|
返回顶楼 | |
发表时间:2007-02-12
jianfeng008cn 写道 lane_cn 写道 无伤大雅的小问题,由他好了。
如果plan name不是数据库索引的话,在你的内存里面查和在数据表里面查实际上消耗的时间相差无几。 等他明白了软件应该怎样设计,他自然不会在这种小问题上多费一点脑筋。 “软件应该怎么设计”,你就知道,人家不知道你知道。这个问题小吗,我看还是要看什么样的系统的吧,站着说话不腰疼,大家观点不一致而已,我说你说这话明显是“程序员很普遍的臭毛病” ![]() 你说的对,要看什么样的系统。如果是100万条记录,数据库表又已经建立了这个索引,他偏不用,硬要自己去一一遍历,那个差别就大了。 对于一个100行记录的表来说,是自己遍历查询还是交给数据库去遍历查询,根本没什么影响。所以由他去好了,你跟一个程序女工争论这个有啥意思,对你现在开发的系统有好处吗。 |
|
返回顶楼 | |
发表时间: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 } |
|
返回顶楼 | |
发表时间:2007-02-13
如果要重构,那样的代码多少写点注释吧。。。。
|
|
返回顶楼 | |
发表时间:2007-02-13
1.代码是写给人看的。
2.除了牛人的代码,费脑子的代码不是好代码。 3.这世上没几个牛人。 |
|
返回顶楼 | |
发表时间:2007-02-13
讲一个在我们某个项目发生过的事情
这个项目是数据密集型的,有很多的批量操作,其操作逻辑和单条操作逻辑很相似,比如批量保存/批量删除等等。 一开始的时候,有若干个熟悉sql但是不怎么熟悉java的人,把大量的逻辑放在存储过程里面,java的若干个层都是简单调用。 这个项目时间很长,做了好几期,过了两三年以后,原来的人都换的差不多了,新的一批人比较熟java但是不怎么熟sql,觉得维护起来很吃力,大家一商量,把其中业务逻辑比较复杂的几个存储过程用java重新实现了一遍。 —————————————— 个人觉得在敏捷过程之下,这两种具体的实现方式没什么差别,一开始写成咋样就咋样好了。 我不赞成一有重复代码就开始重构,我认为应当是在“开始出现第三次重复代码”的时候进行重构。 |
|
返回顶楼 | |
发表时间:2007-02-14
后面的代码对数据库的成本高.每次都会改到不需要的数据.
倒不如用前面的代码. |
|
返回顶楼 | |