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

一段代码引发的思考

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

IBM研究人员:仅200条微博 就可构建人格剖析图 MDCC重磅讲师:Pebble CEO Eric Migicovsky 历届中国大数据技术大会PPT精粹(一) 通讯也“跨界”:几行代码,API+SDK,用PaaS实现移动互联 MIT风景线:丝绸雕塑、VR代码、机器人、智能按钮及保时捷 深度学习新算法,完成字里行间的情绪识别 如何在开发项目里和难缠的程序员合作? 移动周报:七大无需编程的DIY开发工具 手把手教学,用jQuery Mobile创建Web App 别惊讶,Android绿色机器人标志灵感来自于卫生间标识 Google TV更名为Android TV 智能电视的路不好走 CTO如何避免决策失控(四)——通盘考虑 做到技术业务不分家 重塑世界!历届MDCC重磅嘉宾演讲大回顾 从贝佐斯的14句言论看商业成功之道 5大宠物可穿戴式设备 Google CIO Ben Fried谈内部工具文化 【开源专访】Fourinone创始人彭渊:打造多合一的分布式并行计算框架 API优先架构或者胖瘦服务器之争 Windows Phone 8迎来Update3更新:支持更大屏幕 更多磁贴 AMD院士站台 异构计算与OpenCL编程师资培训首站清华开讲 Twitter、Square开创者Jack Dorsey的奇趣人生 利用CSS、JavaScript及Ajax实现图片预加载的三大方法 经典电影里的数学 15亿美元!软银联合GungHo收购手游巨头Supercell Oracle“炮轰”开源:称其永远无法在军事领域取得一席之地 零客户端:下一代计算分布模型 苹果聘奢侈品公司巴宝莉CEO Angela Ahrendts为零售主管 看看你会几个?9大最火的移动开发技能 为了进一步拴住用户:传亚马逊与HTC合作开发智能手机 三年?又三年!今年MDCC2013大不相同! 杨远骋:聚美优品与百度云推送的故事 提个建议:在祝福 璇玑大力 的贴子中,有不少的“名句妙词”,我们花点时间,搜集于一贴,同意的举手!(我的分数太紧张) 低级问题:如何把TFileStream中的一个字节读到一个byte变量中? 串口编程问题 jsp+mysql用的的resin服务器,运行一段时间,网站访问速度就很慢了,一般会是什么原因引起的呢? 两个字符串,前面是任意字符,后面必须是数字,怎么验证这两个字符串前面的字符是否一样? 怎么才能不关?? 祝大家中秋节快乐,进来帮小妹一把!关于JavaMail收邮件的问题! 一段列表筐代码不知道能不能短一些(请高手帮忙) 一个关于安装控件的问题? 请教SNMP的命令? Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 如何在formload时就确定TabControl1显示第3页?菜鸟提问 css的问题,如何使字体大一点??? 紧急求救 datagrid选中的颜色(我重新画了一个datagrid,设置颜色) 在access中如何控制查询 avg(某字段)的小数位数,比如要两位小数 如何起死回生 一道题目 做文件上传系统时,当上传较大容量的文件时如大于2M的文件时出差,请问是什么问题? 请教一个insert into select...语句的问题! 简单的问题,取出头n条记录的select语句怎么写? 谁可以介绍一下关于HMM(隐马可尔夫模型)方面的资料? 在windows2003下能上网,不能下载东西,为什么? strtolower 的问题 各位大侠谁知道,哪里能下到LEI或ESB? 在LotusScript中如何输出到控制台? 各位中秋节快乐! 怎样不通过post传输方式传输数据(肯定给分) eMvb中的image和picture控件怎么插入不了图片啊。。。。 有关路径问题 在jsp中的 文件是否存在file.exists()的监测和打开这个文件的疑惑 中秋节了,睡个好觉吧 怎样合并字符串? SQL SERVER 2000为什么安装不了! ■■■■■■十万火急。。公司里,急需给全体员工的一份中秋贺信,谁帮我找一分,拜托了! 關于數據庫系統表的說明和pb本身的自主創建的四個系統表的相關細節 关于App.path的丢失 如何动态设置cedit中可输入数据的长度呢 关于用c读取文件 我有一个内网,怎么使外网能访问内网的网页. 我靠,JBuilder 9怎么就那么那么那么那么那么那么那么那么慢啊??? 更那堪冷落 仲秋节!今宵酒醒何处?杨柳岸晓风员残月。 如何把纵向表转为横向表(只轉字段名)? 中秋节,祝你们都快乐,散技术分! 请问怎样一步步学.net阿?! 5xsoft upload组件的使用方法如何? 那位高手能告诉我怎么让option响应方向键(事件)? 急 我的Datawindow怎么不能编辑? 迫在眉睫! 有关fcanf()的疑问 98访问2000的问题,麻烦大家帮忙 关于sysgate的问题 这段话源自于女明星张含韵的一篇微博“深圳庆功宴上,遇到默默支持了我六年的小姑娘,心中感动着,同时我不得不承认,五年的时间足以淬炼与改变一个人.可能相比较而言,每天都面对着自己, 人类果真有发现过外星人的遗骸吗? 小明要测量一座古塔的高度,从距他2米的一小块积水处C看到塔顶的倒影,已知小明的眼部离地面的高度DE是1.5,塔底中心B到积水处C的距离是40m,求古塔的高度.我刚上初三,希望用的方法是学过的 小明要测量一座古塔的高度,从距他2米的一小块积水处C看到塔顶的倒影,已知小明的眼部离地面的高度DE是1.5m,塔底中心B到积水处C的距离是40m,求古塔高度. 小明和小涛去测量一座古塔BE的高度,他们在离古塔60m的D处,用侧倾器高AD=1.5m,则古塔的高为多少米? 愚公是什么样的人? 在短语的括号中填上表示“看”的词.( )画展 蒙哥的成就虽然伟大,但仍需通过最后的考验 一项工程,甲单独做20天完成,甲队做了8天以后.由乙接着做.剩下的乙队单独做15天完成.问乙队单独完成这项工程需要多少天 请问过protel99se中孔焊盘的顶层中层和底层是什么意思 狂风暴雨般的处罚,一点点授予的褒奖.上面这句话,希望答案能详解一点 谷歌无人驾驶汽车安全性可超人类驾驶(印度发生连环爆炸 致5人死亡25人受世界最高人找到真爱将结婚 两人相差7阿根廷举行中期议会选举 执政联盟面临韩“独岛”宣传片擅自使用日剧画面 视阿根廷国会选举受瞩目 现总统或丧失部美国旧金山湾区万圣节前多起驾车枪击 潘基文强烈谴责刚果(金)反政府武装袭澳富豪小派克投资电影事业 目标瞄准中美国药监局将限制使用多种致瘾性处方止旧金山举办“安全街道日”活动宣传安全德国立案调查默克尔手机被窃听事件三亚严打假媒体、假记者招摇撞骗敲诈勒2013年日本人口减少规模创新高 产中俄科技合作从优势互补迈向友谊传承韶关市区大学路发生命案2死1伤 嫌疑訚柏云南迪庆州任州委书记(图/简历)女神世界杯选手做客华商网 颠覆理工科湖南:病人车祸后抢救无效死亡 家属在大营裘皮订货会开幕 当日成交额高达5北京农业局局长吴宝新一行来衡考察农业中国各地6月5日天气预报金色盾牌玄黄真人薄情王霸爱青楼女:玉颜心碎情人不乖:总裁不放手火影之白日梦末世狩魔龙珠之霸道的轮回高达之染血百合阳纪火影之一三大瞳术网游之狂仙凯旋王国旅游念青唐古拉观景台旅游北山国家森林公园旅游龙井峡漂流旅游蓝调庄园旅游文笔峰旅游淮北龙脊山旅游南药园旅游千泷沟大瀑布旅游曾国藩故居旅游云峰湖旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘