说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

一段代码引发的思考

HTML文档下载 WORD文档下载 PDF文档下载
作者Lukas Eder发表了一篇文章《code-made-me-cry》,引发了开发者们的广泛讨论及思考。在他看来,阻力最小的方法往往容易出错,但也不应该为如此琐碎的事情编写10行代码。

作者Lukas Eder发表了一篇文章《code-made-me-cry》,引发了开发者们的广泛讨论及思考,我们一起来看下(以下是译文)。

我的一位朋友告诉我,他最近遇到关于正在维护的遗留应用程序的一些问题。下面的这段代码就能说明我们正在讨论的内容:

String q = "select replace('" +              accountNo +              "%','- ','-') from dual";rs = stmt.executeQuery(q);if (rs.next()) {accountNoFormatted = rs.getString(1);}

看到这,瞬间让我感到欲哭无泪。如果这只是一个简单的示例,那么我能想象出该应用程序剩余部分是怎样的。事实上,再找出这些问题的缘由前,首先应确定为何他需要这些事项,他(我的朋友)甚至考虑在该应用中引入jOOQ或者其他新技术。

下面是一些关于如何在应用程序中操作数据库的建议:

1.不要给数据库发送过类似这样的琐碎逻辑( trivial logic 

我曾经在博客中发表了《10 Common Mistakes Java Developers Make when Writing SQL》。感兴趣的不妨移步去看看。尽管是一段简单的字符串替换,但并非是小事。为什么要冒着数据库往返/网络延迟、数据库连接或者数据传输超时,或者各种问题可能发生的风险去让数据库做一些Java就可以完成的事情?

accountNo.replace("- ", "-");

这里,我们还能采用SQL函数命名的方法。为什么要经历使用JDBC API这么繁琐的过程?亲爱的开发者们,利用1小时来研究java.lang.String可用的方法列表吧,这个方法看起来很棒,千万别低估了类!

2. 切勿格式化已格式过的数据

这是条经验法则:一旦数据被格式化,那么它就不可用于计算/数据处理。

这就是为什么没有任何人想要格式化数据的原因。通常这些数据是为了显示给人们看的,因为人们并不善于破译或记忆这些数据。

a56225e0-45ef-11e3-8f96-0800200c9a66

相反的,人们更擅于阅读且记忆类似这样的:

My wife's bank account

正如前面所说的,一旦数据被格式化,那么它就不可用于计算/数据处理。如果在格式化过程中出现错误,那么修复格式化也是错误的。因此,永远不要格式化已经格式过的数据。

3. 切勿在数据访问层中格式化数据

正如人们不擅长操作比较长的特有ID一样,机器也不擅长操作格式化数据。事实上,在数据访问层进行格式化是有理由的,也许你还未遇到过。当然,一个可以接受的理由是你在DB中需要运行一个非常复杂的、高度优化报告。但通常你不会这么做,这是因为你会考虑从Java字符串中使用 SQL replace() 函数来删除空格,这并不是个复杂的报告。

因此,永远不要在数据访问层中格式化数据,除非你拥有一个令人信服的技术。accountNo应该保持不变,ID-style尽可能地贯穿整个应用。在accountNo干扰UI之前,完全没必要去格式化数据。

OK,说句公道话,也不是没有例外。假如当你选择在UI中进行数据排序,那么你可能想通过格式化各种accountNo来进行数据排序,排序结果正如下面所例举的这样:

SELECT ..FROM accounts aORDER BY a.account_no_formatted

4. 懒惰

这里有个非常简单的方式来帮助你成为更加优秀的程序员——偷懒。

由于太懒你不会将 "- " 替换为"-",为这样的小事编写10行代码。你甚至还会认为:

There HAS to be a better way to write this。总会有更好的方式来编写这个。

阻力最小的方法往往容易出错,但也不应该为如此琐碎的事情编写10行代码。一旦你能够用1行代码来解决琐碎的事情,那么,你的生活会变得更好。

英文出自:Dzone

VB用Sockets发送电子邮件 用VB 创建自己的通信程序 用VB5.0开发通信软件的技巧 用VB5开发IE 用VB编写网络寻呼 用VB编写小型的网络系统 用VB创建自己的通信程序 用VB构建Internet的应用 用VB开发标准CGI程序 用VB实现客户——服务器(TCP/IP)编程实例 用VB实现聊天讨论室和点对点会话 用VB写一个定时PING某IP的程序 用VB制作浏览器 用Visual Basic 5.0设计E-mail程序(MAPI) 用Visual Basic6.0编写客户服务器程序 用Visual Basic创建FTP组件 用Visual Basic开发数据库浏览器 用Visual Basic轻松地设计Browser及Ftp程序 VB用Winsock控件发信Email VB用Winsock实现点对点通信 邮件检查程序(二) -VB资料 邮件检查程序(一) -VB资料 在VB程序中怎样挂断拨号网络 在VB中利用UDP协议编写聊天程序 在VB中模拟实现邮件传输 在VB中实现文件上传 在VB中使用UDP协议 在VB中用Outlook发电子邮件 在程序中打开 Internet 拨号连接窗口 -VB资料 在一个单位内部或通过广域协议(如X.25)互联的行业内部都有几十或上万台计算机互联,用Intrane 在应用中集成浏览器-VB资料 请问为什么向Oracle表里加不上记录? 我在局域网中用些东西常被主机防火墙隔了,有什么办法绕过防火墙 谁有MPEG-LAYER3的详细资料或连接? 我用一些软件如音乐大师等,一打开程序,该程序窗口就被关闭了,而在光盘上进行都可以? 如何判断一个大整数是素数,如何找出整数的模逆 怎样使用C#做互相通信的client/server程序 image类型字段,如何用update命令更新 请问指针的指针,二维数组,指针数组,之间有何区别 PB数据库连接字符串的问题 如何购买NFS软件,是Windows pc 访问AIX用的? 请囊相授求mcsd信息 为什么对话框程序最小化时占用内存会减少很多呢?(VC6) 备份主域控制器加入后,登陆不进去了 新手上路,DDE的,绝对给分!!! 帮帮我 怎样修改一个窗口的系统菜单? 怎样将自己做的ASP.NET程序放到IIS服务器上去?服务器需要怎么配置? 在线等待一个问题!!!解决问题就散帖 关于NETANT的有不健康连接的通知????? 一个关于SQL_Server2000复制时发生的问题,请大家帮忙!(在线等待) 当我删除一条记录时会跳出错误,谁帮我看看 请囊相授求帮助 对这个程序实现上大家有什么想法? 触发器一行更新与多行更新有什么区别 请问如何能让我的Cricheditctrl最多输入100个字符???谢谢!!!!! 关于向数据库中插入时间的问题 在局域网中如何判断是否连到服务器?(用delphi) 有没有嘉兴的高手?QQ13136276mailsunrace@163.com 150分:怎样实现类似Delphi中的TClass.Create的功能? 请大家给我这个oracle初学者一些入门指点(偏重Developer 和discoverer方面) 请教! 关于winnt4的救命问题,如何共享上网? 急!!小弟现在用midas做一个三层的系统,用Dcom连接,但是在客户端连接服务器说类字符串未注册 关于选择菜单的这个功能怎么实现 高分求书:用DELPHI搞数据库的书! 关于Potoshop编程的有关问题,知道的请进! 如何改变列表题背景颜色,数据窗口控件用的是动态sql语句。 如何把unsigned long型的对方IP地址,设在ClientSocket的IP中 开发游戏软件一般要用到什么编程工具和编程语言? 为什么 semaphore 和 event variables 是不好的? 在dos下,如何用汇编语句获知XXX盘符是否为网络盘或本地盘或substed盘??? 如何实现字符串种的准确查询! 灰头土脸的问 F7 & F8 区别到底是什么? 我看着都是单步.... 如何在 windows下 破解 写保护卡? VC+ADO,怎么实现把*.DBF表导入SQLServer2k里。 一个关于库文件的问题 我在用VB编数据库SQL SERVER,想实现数据库中关键表在本地磁盘中备份,通过代码应该怎样实现 谁想与我交换主页链接 一个程序编译通过后,我把paradox数据表的某一字段由N型改为了A型,结果运行时出错,应该怎么做呢? 如何用存储过程将一个查询的结果存为本地的一个XML文件? 有二袋糖果,甲袋是68粒,乙袋是20粒,从甲袋每次拿出6粒,放到乙袋,拿几次才能使2袋的数量相等 椭圆形周长374米面积是几亩?怎么算? have some 后面加名词复数吗 有两袋糖,甲袋有45粒,如果从乙代糖中拿出20%放入甲袋,两袋糖的数量一样,乙袋原有多少粒糖?现在就要, 求比一个数多(或少)几分之几是多少的应用题的几个提问求解 小孩几周岁可以上一年级? 全自动滚筒洗衣机最少要放几件衣物一起洗?我家的是三洋全自动滚筒 反应边疆将士生活、心情的有关诗句(一句) some other 后面应该加名词单数还是复数? 滚筒洗衣机洗一次衣服大概要多少电, 应用题中得出的几分之几后面用写单位名称吗? 教育部门有没有规定小孩几周岁可以上小学?提前可以吗? 全自动洗衣机怎么洗湿衣服?情况是这样的,我家洗衣机是6.5kG的,我妈功能选错,但注入了部分水.我关掉后重新开启,选功能,发现他洗不动.因为上限是6.5kg,刚刚我妈注入了部分水,已经有20多KG了 某品牌的一种自动洗衣机,被设计为当投入衣物在2.5正负0.5kg时,自动选择注入水量级别为“少”;当投入衣物在3.5正负0.5kg时,自动选择注入水量为“中”;当投入衣物在4.5正负0.5kg时,自动选择 中国儿童是六周岁.楼下说的年龄跟中国人一样的! 老牛吃草的下一句是什么歇后语 一个椭圆形的面积为8000平方米,它的周长为多少? 孩子几周岁让上一年级我的女儿时04年9月29号生的,到什么时候让上一年级?我是农村的赵县 写出形容动物叫声的词.虎( ) 狼( ) 龙( ) 猿( ) 马( ) 狮( ) 犬( ) 鸟( )大家快告诉我吧~~ what引导的疑问句加复数名词时可以在名词前加数词吗? 小学一年级的孩子该如何来教育? 一块铜锌合金760克,现在铜锌按3:1的比例重新铸,需加40克铜,原铜锌各多少克?快啊, Don't answer any question(s) he asks you 这里的QUESTION应用单数还是复数?在否定句 疑问句中,名词应用单数还是复数? 甲乙两车同时从AB两地出发,甲车每小时行48千米,乙车每小时行40千米,两车在剧中点32千米处相遇.求AB两地相距多少千米 在水池边上发现的,这是什么虫子啊 国家规定一年级入学年龄是几岁 5呎3吋等于多少厘米 送别情景的有什么诗,将士边疆生活的,还有儿童生活的.还有描写月亮的, 小学一年级报名年龄规定 5呎11吋等于多少厘米?如题 歇后语老牛吃草 您好!请问国家规定, 5呎8吋是多少厘米?要准确的 I like Wednesdays改为一般疑问句 甲乙两车同时从ab两地出发,甲车每小时行48米,乙车每小时行40米,两车在距中点32米处相遇,两地相距多少 5呎7吋 是多高?是hk的5呎7吋 I like hamburgers every much.怎么改一般疑问句 歇后语:老鼠钻烟筒 一份冰激凌英语怎么说 I like it.变为一般疑问句 歇后语:老鼠钻风箱----- 蚊子咬菩萨----- 黄牛吃草----- 赶鸭子上架----- 老鼠歇后语:老鼠钻风箱-----蚊子咬菩萨-----黄牛吃草-----赶鸭子上架-----老鼠钻烟囱----- 牛乳钙一般适合什么年龄段的孩子吃? I like dog 改为一般疑问句 老鼠钻烟筒的歇后语是什么 一份冰激凌用英语怎么说 a pair of glass是单数还是复数?应该是a pair of glasses 补充歇后语 赶鸭子上架—— 阿斗的江山—— 黄牛吃草—— 老鼠钻烟囱—— 霸王炮打苍蝇—— 矮子骑高马— 在矩形ABCD中,E为AD上一点,EF垂直EC交AB于F,连结FC,三角形AEF与三角形DCE是否相似 a pair of pants 是单数还是复数 养鸡场有两百只公鸡占鸡总数的8/15,母鸡有多少只? 5呎10吋是多少CM啊? 几岁小孩可以读一年级? 某养鸡场,母鸡和公鸡的比是9:1.母鸡和公鸡各占鸡总数的几分之几? 五呎九吋是多长请说具体,我是笨人! 形容下面动物叫声的词语 biscuit的复数形式 鱼食是什么虫就是那种活的鱼食,红色的长的虫子,请问这是一种什么虫子?时间长了还会腐败变臭? 写一下形容下面动物叫声的词1.虎____2.鹤____3.狮____4.狼____5.猿____6.犬____7.龙____8.马____9.鸟____ some后面什么时候加复数名词 单数名词 将下列名词按照合适的分类填入图中 生物、动物、植物、鱼类、两栖类动物、鸟类、哺乳动物、昆虫、软体动将下列名词按照合适的分类填入图中 生物、动物、植物、鱼类、两栖类动物、
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘