博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一段代码引发的思考
阅读量:7296 次
发布时间:2019-06-30

本文共 1759 字,大约阅读时间需要 5 分钟。

摘要:作者Lukas Eder发表了一篇文章《code-made-me-cry》,引发了开发者们的广泛讨论及思考。在他看来,阻力最小的路径通常是一切错误的根源。因此,即便是为琐碎的应用编写10行代码也是值得的。

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

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

 

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

 

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

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

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

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

 

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

 

 

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

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

 

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

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

 

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

 

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

 

1
My wife's bank account

 

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

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

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

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

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

 

1
2
3
SELECT ..
FROM accounts a
ORDER BY a.account_no_formatted

 

4. 懒惰

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

由于太懒以至于无法将“- “替换为“-”。正是由于太懒,你甚至还会认为:

 

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

 

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

转载于:https://www.cnblogs.com/code-style/p/3418008.html

你可能感兴趣的文章
Kubernetes[4]—RC(复制控制器-副本集)
查看>>
Citrix XenServer 优化
查看>>
js仿京东轮播图效果
查看>>
x-manager 管理 kvm虚拟机
查看>>
MySQL同步时,出现的ERROR 1201 (HY000)错误解决方法
查看>>
TurboMail邮件系统异地分布式部署方案
查看>>
我的友情链接
查看>>
Executors.newFixedThreadPool和ArrayBlockingQueue一点使用心得
查看>>
Android异步从网络下载图片并且缓存图片到本地的demo
查看>>
Linux Shell编程入门
查看>>
JAVA调用返回XML格式数据的WebService,并通过XPath解析XML的应用
查看>>
虚拟机windows中编译环境的分辨率能否固定
查看>>
Python-函数
查看>>
全排列
查看>>
android音乐播放器(2)
查看>>
iOS presentedViewController的基本使用
查看>>
LNMP整合安装Redmine2.3实录
查看>>
易宝典文章——怎样管理Exchange Server 2013安全组
查看>>
erlang 简单例子的编译运行
查看>>
HyperV 中Windows Server 2012 非共享存储的在线迁移
查看>>