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

一段代码引发的思考

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中使用API函数 (之二) 在VB中使用API函数 (之三) 在VB中使用API函数 (之四) 在VB中使用API函数 (之五) 在VB中使用API函数 (之一) 在VB中用API实现多媒体 VB怎样用VB在应用程序中调用API VB怎样在DELPHI中使用API函数 指定文件夹-VB资料 VB5中注册控件三法 Bug:维护 Internet Transfer Control 之 Username 及 Pass VB对低层硬件访问控制 HitTest的妙用 -VB资料 ListBox项的控制-VB资料 VB 6.0中类聚集关系的实现 VB6编程中如何获取硬盘分区信息 VB的坐标系统综述 VB调用C程序动态链接库的方法 VB对低层硬件的访问控制 VB软件开发中的错误捕获及处理技术 VB中Combo的一种输入检查制约方法的实现 VB中Winsock控制的UDP协议的使用 VB中的时间处理问题 Windows操作平台下CGI的实现 -VB资料 按下某组键(HotKey)便执行某程式-VB资料 把所有的字体名称放到 ComboBox -VB资料 把文件置入到Text或RichText中-VB资料 捕捉 MouseExit 事件 -VB资料 操作过程动态显示 -VB资料 查找月份的最后一天-VB资料 程序启动时,如何自动判断 MDB文件是否损坏并自动修复?-VB资料 Trident 9750 顯卡有 OpenGL 驅動嗎? 日期型的动态查询语句怎么做?是不是做成 日期列名+比较符+date('数值')? 针对微软SQL Server的无名蠕虫正在传播 请问如何模拟一次单击事件呢? ================请教怎样改变列表控件任意列的背景颜色??====================== 如何初始化控件CMSFexGrid 网页被某一搜索引擎收录后是否需要再定期提交? 请教各位javascript高手 怎样提取qrexpr1中的值???????????? 谁有Office XP Style的vcl控件,谢谢大家了,急!!! 请问如何模拟一次单击事件呢?急!急!急!急!请各位老大帮帮忙! 怎样让IIS服务器(2000 server)和域服务器的用同样的验证。 很多windows forms下面的程序都实现了XP或是VS.NET风格的菜单了,Web界面上能实现吗? 两周了,我就是不能给分!!请速解决 我要学flash啊~~,帮帮我啊~~~,那里有免费的flash下载,一定要告诉我啊!!!!!别忘了SN号啊!!!!!!不帮不行啊~~~~`,一定要帮帮我啊!! 保存COOKIE,定义了期限,然后期限内关闭IE,COOKIE仍然存在吗? 很多windows forms下面的程序都实现了XP或是VS.NET风格的菜单了,Web界面上能实现吗 如何打开dat为扩展名的数据库文件? 哪儿有IBM的visual Warehouse Manager? ~~~~~~~~~~~~帮你的程序制作奇形怪状的窗体,显现自己的风格~~~~~~~~~~~ emetrix 的软件注册号是怎样提交的?我想自己邮寄给用户好像不行的哦 烦恼的小问题 ★★★DCOM服务器的CallBack的技术怎样实现?★★★ 大虾们,救救我,十万火急!!!!!!!关于Delphi中FTP的问题 realaudio控件的问题!请高手指教 如何用table组件中canmodify属性 现在什么地方下mp3比较好 条形码阅读问题 有关鼠标单击和双击的问题,详情请进~~~~~~~~(看在偶出了一百分的份上,:-D) 很多windows forms下面的程序都实现了XP或是VS.NET风格的菜单了,Web界面上怎么实现 在实际项目中用InterBase数据库可行吗? 有关打印问题????????? win2000找98奇慢无比 template class的连接问题。请赐教 求拓扑排序的所有可能序列?50分求教 java程序员? 请问有没有介绍五子棋算法的好网站?我要做一个和机器下的程序!大家帮忙 请问在编程中的例程,行程和过程的定义是什么?以及他们的区别。 该怎么使用 action() 与 mouseDrag()?请看我的程序问题在哪? DELPHI6.0中的最小化事件是什么 marry____不只怎么办了 (★如何初始化控件CMSFexGrid★) 各位兄弟,不知哪里可以查到所有常量的值? 怎么把帽号赋给一个变量?thank 为什么WinXP激活后就不能重装? 困惑--判断颜色是否相同??? (急急急)寻找:win2000/xp/nt/9x 的可安装文件开发包(IFS Kit),送大分 如何在DB2(V5.2)下面实现表的ID自动增加功能? 帖子结不了,在送300分~~~~~~~~~~ 请问oracle那些版本以上叫8i,常用的是哪个版本,有WINDOWS下使用的吗? 我看过的TOOLBAR 都是横着的,可是我现在想做一个竖立这的TOOLBAR 我该怎么做啊!我翻遍了 CODEGURU 可是没有一个这样的例子! 谁有什么好例子 多谢了!! error C2065: 'end1' : undeclared identifier 十五从军征 十五从军征快十五从军征 意思 以“呼唤和平”为话题的作文? 有人说眼睛是心灵的窗户,写人最好是写眼睛.课文中三次写了外祖母的眼神,找出有关句子,体会人物内心世界 <十五从军征>改写成400字左右 有关于中国近代历史人物的作文?400字! 在文章里描写作者感受的句子一定要是感受的急 十五从军征和出塞这两首诗各是从什么角度出发写战争 求一篇关于我所敬佩的中国近现代历史人物—蔡元培的文章,500字左右.要突出蔡元培所令人敬佩之处. 以“感恩让你在行动中成长”为话题的语文作文不少于八百字,要有真实感情 十五从军征500字作文改写十五从军征作文500字 作文 我最敬佩的近现代历史人物 800字看着写吧 自己写 我需要总分总格式的以成长为话题的作文,最好是范文,作文里最好要有古诗词,记住要是总分总格式的,也就是先题记,然后概括,接着一段一个小标题大约三、四段,最后总结的这种类型越多越好 最感人的感恩文章没钱时,买花的题材.急 以心为话题的作文新的,题材新颖,要把小事写成大事,不要特俗的,要有事情的,好的+分不要一楼的 我是九零后作文该写什么1000字 触动心灵的事 作文急! 急! 以心为话题的作文怎么写啊如题 不要跟别人一样的 关于成长为话题的作文成长 为话500字 初一人生作文要是人生目标 关于感悟.感恩.感动的作文是散文 或 诗歌或童话 最好是自己写得(好的话再加分( 以旅途的微笑为话题的作文 快乐的初一生活作文要写的好的 心灵被什么触动 作文 《我找回了……》的半命题作文.500字以上.可以是:自信、成功、友谊、真心等等.母爱也可以。要新颖,情感真切,富有内涵,让人感动。 生活给我自信(勇气)作文 求中国近代历史人物赏析的论文 (800字左右即可) 找一篇半命题作文 寻找_____(如:快乐、友谊、家庭的温暖.) 民风民俗的作文100字 有关于中国近代历史人物的作文? 我找回了 半命题作文最好是梦想,别的也可以啦,450字左右 关于汉族的民风民俗的作文(600字,围绕一件事情写) 选择信心或勇气、诚实的作文的作文提示是这样的:遇到困难你选择了什么,面对撒谎你选择了什么…… 读了20美金的价值的文章后,联系生活实际,谈谈阅读感受一天,爸爸下班回到家已经很晚了,他很累也有点儿烦,他发现五岁的儿子靠在门旁正等着他.“爸,我可以问您一个问题吗 ” ”“爸,您一 荔枝这篇文章主要写什么,表达了怎样的思想感情 在预习里的两个问题答案, 勇气是自信的筹码要求八百字 最快 读了《为中华之崛起而读书》这篇文章后,联系生活实际,说说感受.只要一句话! 《荔枝》一文主要写了什么,表达了怎么的思想感情 ( ),触动了我的心灵为题写一篇不少于600字的作文 以金钱为话题的作文 求历史人物故事!400字左右的作文两篇 寻人启事 ①读寻人启事的时候,女孩正坐在长椅上,浓浓的树荫牢牢地笼罩着椅子,就像母爱,寒冷而郁闷,女孩无言.②用女孩的逻辑来讲,母亲不疼她,母亲除了爱好挣钱外,最大的偏好就是苛求她 作文 金钱 共同面对的话题 作文 勇气我想做你的朋友 寻人启事阅读1.第14自然段,加入登了启事后,母亲仍与回音,女孩又准备写一则更详细的启示,请你为女孩起草这则启事好的话有分这是第14自然段的:14第二天,报纸上多了一则寻人启事:寻母 以"金钱"为话题的作文急( ⊙ o ⊙ 作文 勇气,真想做你的朋友 开头结尾快 寻人启事 金文吉读寻人启事的时候,女孩正坐在长椅上,浓浓的树荫牢牢笼罩着椅子,这就像母爱,寒冷而郁闷,女孩无言.用女孩的逻辑讲,母亲不疼她,母亲除了爱好挣钱之外,最大的偏爱就是苛求 金钱,共同面对的话题1.你知道最早的钱币是什么样子的吗?2.在漫长的经济发展史中,钱发生了那些变化?3.未来社会中,钱的变化趋势又是怎样的?4.了解货币起源和发展的情况、与之相关的 1~6年级,老师,亲人,朋友给予我勇气,鼓励的作文要快 寻找妈妈的寻人启事阅读答案①作文课.老师教完了应用文写作后,当堂给同学们布置了一个题目:假设自己的妈妈丢了,请每个人写一则寻人启事.老师还给每个同学发了一份寻人启事样本,大 以"正确对待金钱"为话题的论文如题 和书做朋友 作文 以和平为话题的作文作文内容要有橄榄绿的,并且突出点 以“感恩母爱”为话题写一篇600字的作文 老师做个朋友的作文怎么写 以”和平“为话题的作文600字左右 求一篇以感恩为题的800字作文一定要800字或800字以上 改写十五从军征 作文500字左右 以呼唤和平为话题的作文 作文 美好的心灵 急求! 描写人物外貌动作语言等人物内心世界可以写拾金不昧的人,助人为乐的叔叔.以小事写,要打动人300字以上
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn