锁定老帖子 主题:这样代码重用?
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-02-14
ajoo同志,我觉得这个问题在于你们到底如何看待数据库。如果仅仅是一种比较方便的存储,那你同事的做法也可以,不过最好重构成上手就把所有的数据弄到内存里去,别让这个对象里有任何数据库调用的代码。
但是如果我是boss,花了n多钱买了个很贵的数据库,那当然会考虑数据库在整个架构中的运用,否则不是浪费嘛。说实话,我一直感到数据库sql还有存储过程很麻烦,因为会跟oo脱节,而且也有你的pair所痛感的重复代码问题。但是重复代码这样的问题要服从于架构!如果架构上决定(考虑到性能或者客户要求等各种因素)业务逻辑要充分利用sql甚至存储过程,那你pair的考虑就完全本末倒置了。 我听说一些项目,完全是用存储过程,java/c#的DAO都就是存储过程的包装代码。当然,对于我来说,我是很讨厌写这种代码的,那真成了软件蓝领了。我有一个同事在做一个.NET的项目时,用泛型和Attribute写了个代码生成器,自动从存储过程产生对应的C#代码。。。估计在这种架构中,这种方式是最好的了。 就你说的这个例子,总的来说,我不太赞同你的pair的做法。多维护一个sql又咋的啦?不必如此走火入魔啦。 |
|
返回顶楼 | |
发表时间:2007-02-15
我觉得这个问题没什么好争论的,对于具体的实现,每人都有其自己的实现路子,只不过你的pair觉得他这种方式更好一些,用一个理由来劝服你用这种方式而已。若是不用的话,你也可以找出充分的理由坚持你自己的做法哦。
|
|
返回顶楼 | |
发表时间: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语句恐怕还是要有两个的吧?! |
|
返回顶楼 | |
发表时间:2007-02-15
有点走火入魔了。怕重复的是逻辑。而这里本来就是两个不同的逻辑。
|
|
返回顶楼 | |
发表时间:2007-02-15
如果很多查询中都需要“status=1"这个条件, 那么用view应该是消除重复的最合理的方法。
|
|
返回顶楼 | |
发表时间:2007-02-15
如果能把一张表相关的sql全部封装在一个类中,这样的封装程度就足够了,也比较容易做到。他非要全部封装在一个方法里面,没必要,也根本不可能。
|
|
返回顶楼 | |
发表时间:2007-03-04
我觉得重构不应该是一种赶时髦,更不应该是一种原则,而应该是每个程序员想"偷懒"时的一种自发行为.
|
|
返回顶楼 | |
发表时间: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浪费了时间)请勿烂用.... |
|
返回顶楼 | |
发表时间:2007-03-05
逻辑在代码中就OO了,在SQL中就不OO了?
不愿意维护SQL,SQL是程序的魔鬼吗?在相当长的未来时间,我们还不得 不面对不怎么OO但很好用的SQL。 |
|
返回顶楼 | |
发表时间:2007-03-05
lixigua 写道 逻辑在代码中就OO了,在SQL中就不OO了?
不愿意维护SQL,SQL是程序的魔鬼吗?在相当长的未来时间,我们还不得 不面对不怎么OO但很好用的SQL。 所以说DAO是装魔鬼的瓶子 封装它让它不能出了瓶子 |
|
返回顶楼 | |