基于Every thing is string(一切都是字符串)来改善Java等强类型语言的开发体验

6074 次阅读 by 九九 2014-03-01 | 标签:hjzphpcms 代码优化 重构 DevOps TDD 前端 问题 Java 总结 一些怪想

这些天一直在决定一件事情
“Every thing is string”——一切都是字符串
11年前一直在写php,对于像java这样的强类型的语言用的还很比较少。像php这种语言里没有类型这样的概念,或是说很不强调“类型”这个概念,变量是写到哪是哪,值是设到哪是哪,只要不报错,一切就是很OK的。但之后用了一段时间的Java,刚开始的时候不太适应,一直在想,为什么Java里有那么烦人的类型转换?其实有很多的转换都是没有必要的,举个栗子就如数据库里存的int数据,其实虽然代码写的是int id 什么的,其实到了最后还是会变成String这种存到DB里。经过一段比较长时间的尝试思考跟实验,我决定了如题这样的一概念
“Every thing is string(一切都是字符串)”
至于PHP这类的动态语言我就不多说,如果你有PHP或Javascript或Python这些语言的知识话,想念你懂我想表达的内容。 ———————————— 此处省略了很多字—————————— OK,继续说说Java里,应用用一概念的实践。 先看一张表结构图。 [caption id="attachment_505" align="aligncenter" width="358"]表结构图 图1 表结构图[/caption] 玩Web开发的同学应该看的太多了,哈哈哈。你可以看到,这里有很多的类型字段,如:int, bigint, varchar, char, timestamp, char, text等。那么如果按Java里像Hibernate这样的框架来对应的话,我们需要给这些字段设置成对应的类型的类属性,如:
private int id;

private String name;
等等。其实,这些类型跟我们用户的输入又是刚好不一致的~
所有浏览器输入的数据都是字符串!
所以按以前的思路,用户在录入数据后,就需要去做一次String到各个类型的转换,然后呢,在存库的时候,又要做一次不是String到String或是Byte Stream的转换。 但如果是按“Every thing is String”的思路,这里只需要做一次转换及部分转换。OK,说到这里,你会问我业务会要求做转换~好那再来扯扯业务领域。 先引用一个观点:
只做好当前的事情。
如果你有看过TDD(测试驱动开发)或是DevOps(持续集成开发)的同学应该很熟悉这个理念。我觉得这个理念最赞的地方在于,它是另一种对不要太自恋的文明劝导。我把它应用到代码中,我觉得像Java里大面积的事先转类型的工作也是属于“太自恋”的圈圈里,并不是从“只做好当前的事情”出发。 首先问一个问题:为什么要做数据类型的转换?是为了业务对吧?其实有多少转换后的数据是需要参与业务逻辑进行处理的呢?除了一些特殊业务像财务类的外,大多的数据都是做一些空值、长度、格式(日期、数值、电话、Email)等约束性的检测,但这些内容String大神已经可以很Easy的做到了,最多也就用上最要命的正则来对付~ 再说回来,其实String是所有编辑语言里最通用的类型,我们可以从String转成任何类型,也可以从任何类型转成String,像Java里Object后面加了“.”后,Eclipse会自动给你提示有一个“toString()”方法的~请不要说还有“Long”、“int”这类的元数据类型。。。这种直接加双引号,你懂的~当然,我还没有去分析这种方案的性能表现,请给我点时间。 如果你赞同这个观点,那么就需要去找一个能承载复杂数据结构且能保持较高性能的字符串存储容器,我选择“Map”系列。 现在在实践的内容有:Map配置,Map 数据集,如下图2,图3. [caption id="attachment_508" align="aligncenter" width="459"]Map配置 图2 Map配置[/caption]   [caption id="attachment_509" align="aligncenter" width="536"]数据集-db-rows 图3 数据集-db-rows[/caption]               

评论(23)

暂无评论!


PS:多打字可以减肥哦~234字以内。支持表情:


Top