论坛首页 Java企业应用论坛

这样代码重用?

浏览 26206 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-02-14  
ajoo同志,我觉得这个问题在于你们到底如何看待数据库。如果仅仅是一种比较方便的存储,那你同事的做法也可以,不过最好重构成上手就把所有的数据弄到内存里去,别让这个对象里有任何数据库调用的代码。

但是如果我是boss,花了n多钱买了个很贵的数据库,那当然会考虑数据库在整个架构中的运用,否则不是浪费嘛。说实话,我一直感到数据库sql还有存储过程很麻烦,因为会跟oo脱节,而且也有你的pair所痛感的重复代码问题。但是重复代码这样的问题要服从于架构!如果架构上决定(考虑到性能或者客户要求等各种因素)业务逻辑要充分利用sql甚至存储过程,那你pair的考虑就完全本末倒置了。

我听说一些项目,完全是用存储过程,java/c#的DAO都就是存储过程的包装代码。当然,对于我来说,我是很讨厌写这种代码的,那真成了软件蓝领了。我有一个同事在做一个.NET的项目时,用泛型和Attribute写了个代码生成器,自动从存储过程产生对应的C#代码。。。估计在这种架构中,这种方式是最好的了。

就你说的这个例子,总的来说,我不太赞同你的pair的做法。多维护一个sql又咋的啦?不必如此走火入魔啦。
0 请登录后投票
   发表时间:2007-02-15  
我觉得这个问题没什么好争论的,对于具体的实现,每人都有其自己的实现路子,只不过你的pair觉得他这种方式更好一些,用一个理由来劝服你用这种方式而已。若是不用的话,你也可以找出充分的理由坚持你自己的做法哦。
0 请登录后投票
   发表时间:2007-02-15  
抛出异常的爱 写道
引用


Plan getPlanByName(String userid, String planName);
Plan[] getPlans(String userid);


getPlanByName内部执行的是:
select * from Plan where userid=#userid# and plan_name=#planName#
and status=1
order by order_num

getPlan的内部执行的是:
select * from Plan where userid=#userid# and status=1


多写一个方法
Plan[] getPlansOrige(Modle m)

里面的SQL句是:
select * from Plan where userid=#m.userid# and plan_name=#m.planName#
and status=1
order by order_num


你用到的两个方法引用这个方法得到的内容


PS:有时多易少,少弈多...

重构还是必要的,不管怎么说“只修改一处”的原则还是要坚持的。
那个pair的方法笨了些,“多写一个方法”就可以解决问题。
不过SQL语句恐怕还是要有两个的吧?!
0 请登录后投票
   发表时间:2007-02-15  
有点走火入魔了。怕重复的是逻辑。而这里本来就是两个不同的逻辑。
0 请登录后投票
   发表时间:2007-02-15  
如果很多查询中都需要“status=1"这个条件, 那么用view应该是消除重复的最合理的方法。
0 请登录后投票
   发表时间:2007-02-15  
如果能把一张表相关的sql全部封装在一个类中,这样的封装程度就足够了,也比较容易做到。他非要全部封装在一个方法里面,没必要,也根本不可能。
0 请登录后投票
   发表时间:2007-03-04  
我觉得重构不应该是一种赶时髦,更不应该是一种原则,而应该是每个程序员想"偷懒"时的一种自发行为.
0 请登录后投票
   发表时间:2007-03-04  
8844.43 写道
抛出异常的爱 写道
引用


Plan getPlanByName(String userid, String planName);
Plan[] getPlans(String userid);


getPlanByName内部执行的是:
select * from Plan where userid=#userid# and plan_name=#planName#
and status=1
order by order_num

getPlan的内部执行的是:
select * from Plan where userid=#userid# and status=1


多写一个方法
Plan[] getPlansOrige(Modle m)

里面的SQL句是:
select * from Plan where userid=#m.userid# and plan_name=#m.planName#
and status=1
order by order_num


你用到的两个方法引用这个方法得到的内容


PS:有时多易少,少弈多...

重构还是必要的,不管怎么说“只修改一处”的原则还是要坚持的。
那个pair的方法笨了些,“多写一个方法”就可以解决问题。
不过SQL语句恐怕还是要有两个的吧?!


少则少已,
只是小小的重复不用非要把SQL消灭干净才好
过度设计了.....
我所说的是把代码一样的部分提出来作一个方法
之后两个方法都去找这个提出来的方法
以达到不重复的作用...
但只是由于两次重复的话
我会用crtl +C  ctrl+V 来作的....非常不值得我去作重构....

PS:在资源够用时可以进行这种重构
但是当资源不够时(多条SQL浪费了时间)请勿烂用....
0 请登录后投票
   发表时间:2007-03-05  
逻辑在代码中就OO了,在SQL中就不OO了?
不愿意维护SQL,SQL是程序的魔鬼吗?在相当长的未来时间,我们还不得 不面对不怎么OO但很好用的SQL。

0 请登录后投票
   发表时间:2007-03-05  
lixigua 写道
逻辑在代码中就OO了,在SQL中就不OO了?
不愿意维护SQL,SQL是程序的魔鬼吗?在相当长的未来时间,我们还不得 不面对不怎么OO但很好用的SQL。


所以说DAO是装魔鬼的瓶子
封装它让它不能出了瓶子
0 请登录后投票
论坛首页 Java企业应用版

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