这是一个工作中遇到的背景比较简单的争论。
有这么一个persistent object,姑且叫它Plan吧。
有这么两个函数:
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
现在,我的pair认为这里面有DRY violation。因为两个select有些重复的东西。pair认为可以这样重构:
Plan getPlanByName(String userid, String planName){
Plan[] plans = getPlans(userid);
for(int i=0; i<plans.length; i++) {
Plan plan = plans[i];
if(planName.equals(plan.getPlanName())) {
return plan;
}
}
return null;
}
而我并不认为应该这样做。我的理由是:
1。原来的实现很简单直观。sql本来就是声明式语言。放着简洁的声明式不用而用复杂的命令式,有走回头路的嫌疑。
2。重构之后代码量更多,还要写更多的单元测试。
3。两个select只见的共同之处更像一种偶然的而不是概念上的重复。让getPlanByName依赖于getPlan感觉增大了耦合。
4。真要觉得select里面的东西有重复,不如创建一个view: v_plans这样这两个select就变成:
select * from v_plans where userid=#userid#
select * from v_plans where userid=#userid# and plan_name=#planName#
避免了status=1的重复。虽然还有"select *"之类的重复,但是这种重复就是语法上的,就像我们在java程序里面可能写无数次"static public void",我们从来不认为这是一个值得改变的重复。
5。效率。
6。系统本来是工作的。即使重构后确实好一点,也不值得花这个工作量。
而pair的主要观点是:
重构后维护上简单,不用维护两个select。
后来和组里其他人沟通,发现持重构想法的不只一个人,相对来说我的观点是比较孤立的。
那么你是怎么看这个问题?
分享到:
相关推荐
在编程领域,代码重用是提高效率和保持代码可维护性的重要原则。C++作为一款强大的面向对象编程语言,提供了多种方法来实现代码重用,从而使得开发者能够更高效地构建复杂的软件系统。本教程专注于讲解如何在C++中...
C++代码设计与重用
基于Java代码重用性的研究 代码重用性是软件开发中一个非常重要的概念,它可以使得程序变得更加简练、清晰和易于维护,同时还能够节约软件开发的成本和提高软件生产的效率。在Java应用开发中,代码重用性已经成为...
在编程领域,代码重用性是提升开发效率和软件质量的关键因素之一。代码重用性意味着我们可以避免重复编写相同的逻辑,使得程序更加模块化,易于维护和扩展。针对Java编程语言,以下是一些提高代码重用性的核心策略:...
书中全面展示了C++编程中编写可重用代码的方法与技巧,涉及重用性基本概念、类设计、扩展性、效率、错误处理、冲突解决、兼容性、继承、移植性、程序库等多个与代码重用相关的领域。为了加深读者的理解,每一章节的...
在软件工程中,代码重用是提高效率和减少错误的关键原则之一。以下是对这一主题的详细探讨: 1. **面向对象编程(OOP)**:C++的核心是面向对象编程,它允许我们通过类和对象来组织和管理代码。类定义了数据结构...
书中不仅涵盖了重用性基本概念、类设计、扩展性、效率、错误处理、冲突解决、兼容性、继承、移植性以及程序库等与代码重用相关的诸多话题,而且每一章节都配有总结和练习,帮助读者巩固知识点,并通过参考文献和相关...
c++代码设计与重用,对于比较熟悉c++想进一步规范代码设计和优化设计的朋友非常合适
"可重用代码管理器"就是这样一个工具,它专门针对这一需求而设计,旨在帮助开发者有效地管理和利用已有的代码片段,从而减少重复劳动,增加代码的复写率。 首先,我们要理解什么是可重用代码。在编程中,可重用代码...
c++代码重用 //19.11 数据类Data、12 节点类Node、13 操作节点类的list类、14 操作节点类List、15 操作节点类List、16 程序界面、17 程序终结 //可在一个节点中实现头节点、中间节点、尾节点的功能的链表 #include ...
### C++标准模板库与代码重用 #### 引言 随着软件工程的发展,软件重用成为了提升软件生产力和质量的关键途径之一。软件重用旨在避免重复开发相同或相似的功能,通过重用代码、模块、设计结构、规格说明以及文档等...
### jsp中的代码重用技术 #### 一、引言 在现代Web开发中,JavaServer Pages (JSP) 技术作为一种强大的服务器端技术,为开发者提供了丰富的工具和框架来构建动态网页应用。其中,代码重用是提高开发效率、降低维护...
本书内容详尽,涵盖了包括重用性基本概念、类设计、扩展性、效率、错误处理、接口设计、兼容性、继承、移植性和程序库等与代码重用相关的多个主题。 书分为12个章节,每个章节都以理论知识结合实际案例的方式,详细...
全面展示如何使用c++编写可重用的代码,从而提高程序员的开发效率。 全书分为12章。包括重用性基本概念、类设计、扩展性、效率... 本书适合有一定c++经验的程序员阅读,也可供以提高代码重用性为专门学习方向的读者参考
在这个“LabVIEW实现代码重用.zip”压缩包中,我们可以推测其内容可能包含了一些LabVIEW的代码模块和范例,旨在帮助用户理解和实践如何在LabVIEW中实现代码的复用,从而提高开发效率和程序质量。 在LabVIEW中,代码...
CodeManagerAddIn 1.0为Visual Studio 6.0集成开发环境插件。插件的主要作用是提供在Visual Studio 6.0集成开发环境下对可重用代码段进行管理的功能,包括代码段的保存、代码段搜索以及代码段共享。
b)代码入库界面中增加了记录上次输入数据的功能,即将代码入库界面关闭后再打开,界面中仍然会显示上次的输入,这样可以方便的分多次将要入库的代码拷贝到代码入库界面中进行入库; c)代码搜索界面中增加了显示最近...