百度在我肩上哭泣英文_使我哭泣的代码

百度在我肩上哭泣英文

我的一个朋友最近告诉我他目前在维护的旧应用程序中遇到的问题。 这是一段示例代码,用以说明我在说什么:

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

立刻让我哭了。 如果只是一个示例,我可以想象该应用程序其余部分的外观。 实际上,这些问题正是他认为自己需要首先解决几件事的根本原因,甚至还没有考虑在该应用程序中引入jOOQ或任何其他新技术。 是的,有一些严肃的教导要做(或打耳光?)

如果到目前为止您在不了解我在说什么的情况下阅读了这篇文章,那么让我给您一些建议。 请遵循以下建议,以防止我的朋友跳出窗口:

切勿将这种琐碎的逻辑发送到数据库中执行!

最近在博客中写道, 您应该计算/执行数据库中的某些内容的 各种原因 。 简单的字符串替换不是其中之一! 哎呀,为什么要冒着数据库往返/网络延迟,连接和/或数据传输超时以及各种其他可能用Java编写的东西的风险?

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

该方法甚至具有 SQL函数相同的名称 。 哎呀,为什么还要为此使用可怕的JDBC API呢? 亲爱的开发人员,请。 花1h并研究java.lang.String可用的方法的整个列表。 真是太棒了,完全被低估了!

切勿重新格式化以前格式化的数据

这是经验法则:格式化数据后,数据将永远丢失并且无法用于计算/数据处理。 任何人都可以格式化任何数据的原因只有一个简单的原因。 用于向人类显示数据。 人类不擅长破译或记忆像

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

人类擅长阅读和记忆以下内容:

My wife's bank account

所以在我后面重复一遍。 数据格式化后,将永远丢失并且无法用于计算/数据处理。 如果格式有任何错误,请在错误的地方修复格式。 切勿重新格式化以前格式化的数据。 决不。

永远不要在数据访问层中格式化数据

就像人类对使用长技术ID的操作极为不利,而机器对格式化数据的操作极其不利。 实际上,在数据访问层中格式化数据的理由很少,以至于您甚至都不会想到。 一个可以接受的原因是,当您有一个非常复杂,经过高度调整的报表在数据库中运行时。 但是您没有那个,因为您考虑过使用SQL replace()函数从Java字符串中删除空格。 那不是完全复杂的报告。

因此,请阅读我。 除非您有令人信服的技术原因,否则切勿在数据访问层中格式化数据。 在整个应用程序中,您的accountNo应该保持尽可能原始,技术性和ID风格。 在accountNo到达用户界面之前,绝对不需要格式化它以供人类使用。

好吧,公平地说,该规则还有另一个例外。 当您选择在用户界面中对数据进行排序时,您可能希望按accountNo的格式版本对数据进行排序,因为排序结果将由人类使用:

SELECT ..
FROM accounts a
ORDER BY a.account_no_formatted

偷懒

有一种非常简单的方法可以成为更好的程序员:懒惰。 懒得编写10行代码来用"- "简单替换"-" 。 通过如此令人难以置信的懒惰,您将始终认为:

必须写这个更好的方法

不知道并没有错。 但是,使用最小阻力的路径并为此编写一些琐碎的东西,编写10行代码是不对的。 相信我。 一旦可以用单行代码编写琐碎的东西,您的生活就会好得多。 您可以再次专注于业务逻辑。

参考: JAVA,SQL和JOOQ博客上的代码使我JCG合作伙伴 Lukas Eder 哭泣

翻译自: https://www.javacodegeeks.com/2013/11/the-code-that-made-me-cry.html

百度在我肩上哭泣英文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值