代码坏味道特别篇————Long parameter List 过长的参数列表
刚开始学习编程时,老师说:讲方法所需要的东西都以参数的形式传入,那是我们好像还没学OO这个东东,要不就弄成全局变量,我擦,全局变量可牛逼了,刚开始学习的时候我们都在用全局变量,可是后来工作了,经理说不要用全局变量,我当时就有些醉了,突然间觉得就不会写代码了,其实我们可以用对象来解决这个问题,这样我们就不会开到过长的参数列表了
private DataTable getSentInfo(string Pno, string Pname, string Psytle, string SentTime,string DealerNo,string DealerName)
{
string sqlStr = "select convert(decimal(18,2),round(sum(sc.Price*srd.SentNum ),2))as countPrice,sum(srd.SentNum) as num "
+ "from LB_Sent_Rec sr inner join LB_Sent_RecDetail srd "
+ "on sr.SentID=srd.SentID inner join LB_Sale_Rec sc "
+ "on sc.SaleID=srd.SaleID where sc.cid='" + cidH.Value + "' and sc.Pno='" + Pno + "' and sc.Pname='" + Pname + "' and sc.PStyle='" + Psytle + "' "
+ "and sc.DealerNo='" + DealerNo + "' and sc.DealerName='" + DealerName + "' "
+ "and sr.SentTime between '" + SentTime + " 00:00:00' and '" + SentTime + " 23:59:59'";
return DbHelperSQL.GetDataTable(sqlStr);
}
使用对象后的代码
public class Product
{
public Product()
{
//
//TODO: 在此处添加构造函数逻辑
//
} public string Pno { get; set; }
public string Pnamr { get; set; }
public string Psytle { get; set; }
public string SentTime { get; set; }
public string DealerNo{get;set;}
public string DealerName { get; set; }
}
private DataTable getSentInfo(Product pr)
{
string sqlStr = "select convert(decimal(18,2),round(sum(sc.Price*srd.SentNum ),2))as countPrice,sum(srd.SentNum) as num "
+ "from LB_Sent_Rec sr inner join LB_Sent_RecDetail srd "
+ "on sr.SentID=srd.SentID inner join LB_Sale_Rec sc "
+ "on sc.SaleID=srd.SaleID where sc.cid='" + cidH.Value + "' and sc.Pno='" + pr.Pno + "' and sc.Pname='" + pr.Pnamr + "' and sc.PStyle='" + pr.Psytle + "' "
+ "and sc.DealerNo='" + pr.DealerNo + "' and sc.DealerName='" + pr.DealerName + "' "
+ "and sr.SentTime between '" + pr.SentTime + " 00:00:00' and '" + pr.SentTime + " 23:59:59'";
return DbHelperSQL.GetDataTable(sqlStr);
}
这样是不是更容易理解传入参数所表示的内容呢?
这种方法书中叫 introduce Parameter Object
代码坏味道特别篇————Long parameter List 过长的参数列表的更多相关文章
- 吐槽一下项目中的代码坏味道:滥用java常量
我们的项目中是否充斥着类似以下的代码呢?定义一个专门存放常量的java类(接口),非常多其它类依赖该常量类. public interface IConstant { int ZERO = 0; St ...
- Sonar项目主要指标以及代码坏味道详解
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...
- 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...
- 代码重构 & 代码中的坏味道
1.重构 1.1 为什么要重构 1.1.1 改进程序设计 程序员为了快速完成任务,在没有完全理解整体架构之前就开始写代码, 导致程序逐渐失去自己的结构.重构则帮助重新组织代码,重新清晰的体现 程序结构 ...
- 代码的坏味道(14)——重复代码(Duplicate Code)
坏味道--重复代码(Duplicate Code) 重复代码堪称为代码坏味道之首.消除重复代码总是有利无害的. 特征 两个代码片段看上去几乎一样. 问题原因 重复代码通常发生在多个程序员同时在同一程序 ...
- SonarQube规则之坏味道类型
1.Abbreviation As Word In Name (默认 关闭)坏味道 主要检查验证标识符名称中的缩写(连续大写字母)长度,还允许执行骆驼案例命名allowedAbbreviationLe ...
- 代码的坏味道(4)——过长参数列(Long Parameter List)
坏味道--过长参数列(Long Parameter List) 特征 一个函数有超过3.4个入参. 问题原因 过长参数列可能是将多个算法并到一个函数中时发生的.函数中的入参可以用来控制最终选用哪个算法 ...
- 【转】Bad Smell(代码的坏味道)
1.Duplicated Code(重复的代码) 臭味行列中首当其冲的就是Duplicated Code.如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好. ...
- 代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)
坏味道--夸夸其谈未来性(Speculative Generality) 特征 存在未被使用的类.函数.字段或参数. 问题原因 有时,代码仅仅为了支持未来的特性而产生,然而却一直未实现.结果,代码变得 ...
随机推荐
- 深入理解Redis主键失效原理及实现机制
http://blog.jobbole.com/71095/ 对于缓存失效,不同的缓存有不同的处理机制,可以说是大同中有小异,作者通过对Redis 文档与相关源码的仔细研读,为大家详细剖析了 Redi ...
- git安装步骤
Git简单使用说明 安装git msysgit是Windows版的Git,从https://git-for-windows.github.io下载,然后按默认选项安装即可(注:安装适合自己电脑版本的g ...
- Android 一个漂亮的Android日期和时间选择器:DateTimePicker
DateTimePicker这个类库包含了漂亮的 DatePicker 和 TimePicker ,类似于在新 Google Agenda App中看到的. 项目主页:http://www.open- ...
- Speed-BI 多事实表与表间计算的应用:销售目标达成分析 另一种实现方法
在前一篇<Speed-BI多事实表与表间计算的应用(excel多Sheet关联分析):销售目标达成分析>http://www.powerbibbs.com/forum. ... 7583& ...
- form和validate示例
//验证from表单 $(function () { $("#addUserForm").validate({ rules: { txtName: { required: true ...
- XCode环境变量及路径设置
一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝对路径的问题不大,但是如果你把工程发给别人,别人就要在改这个绝对路径,这时候绝对路径的 ...
- [转载]CAD文件版本
http://blog.sina.com.cn/s/blog_4c9fa4dd0101il1v.html 在工作中会遇到打开一张图纸时出现“图形文件无效”的提示,大部都是因为用低版本软件打开了高版本的 ...
- SpringJUnit4ClassRunner拉起来的单元测试怎么装配Container实例
由于历史代码的原因,产品中部分spring装配的实例需要通过Container的实现类(自定义的)去获取.那么当在单元测试中怎么实例化这个Container实现呢? 实例化Container实现需要A ...
- mysql:on duplicate key update与replace into
在往表里面插入数据的时候,经常需要:a.先判断数据是否存在于库里面:b.不存在则插入:c.存在则更新 一.replace into 前提:数据库里面必须有主键或唯一索引,不然replace into ...
- Unity3D 通用提示窗口实现分析(Inventory Pro学习总结)
背景 游戏中的UI系统或者叫做GUI窗口系统主要有:主要装备窗口(背包,角色窗口也是一种特殊窗口).确实提示窗口(如购买确认).信息提示窗口(一遍没有按钮,ContexntMenu)和特殊窗口(聊天记 ...