本文发表在 rolia.net 枫下论坛我最近写了一小段的SQL helper。就是帮程序员们在需要的时候拼接SQL代码。Java程序员们如果不用ORM的话,恐怕人人都有这样的烦恼。
在我读了公司里某人写的超过2000多行的String拼接后,我彻底郁闷了,于是终于忍不住把它们改成了下面的样子:
sqlBuilder.priortyUp().query.on("column_name1").value("some value")
.and().query.on("column_name2").value("some value").encoding()
.priortyDown();
这么一来容易读很多,也好看也轻便,一行写完。
但是万一人家给的输入参数是null呢?问题就来了。null.upperCase();膨,炸弹爆炸了。所以我们就必须检查输入的参数不是null。可是你检查了,怎么返回检查结果?链式编程要的就是一路点下去,不会有人来给你检查返回值的。抛异常?那和爆炸有什么两样?所以因为我们有了这个问题,我们的程序员写代码才会变成
boolean success = xxx.aaaa();
if(!success) ......
success = xxx.bbbbb();
if(!success) ......
或者try {....} catch(Exception e) {....} 倒是简单了,但有没有人听说过以前手机开发的时候是不允许用try/catch的?那是巨大的系统开销。
所以我们要的是一个一路到底的方案,不管我点多少个点,你都不要给我错误的返回值,或者异常。最后当我写:run的时候,你才告诉我对不对。这叫做Lazy方式。
那我们就想到,如果就算你给我一个null的东西,这个null的东西也能够接受一系列的操作而不崩溃呢?这就是空对象的作用了。所以当我一读到空对象,我就觉得这就是我多年来在寻找的一个东西。更多精彩文章及讨论,请光临枫下论坛 rolia.net
在我读了公司里某人写的超过2000多行的String拼接后,我彻底郁闷了,于是终于忍不住把它们改成了下面的样子:
sqlBuilder.priortyUp().query.on("column_name1").value("some value")
.and().query.on("column_name2").value("some value").encoding()
.priortyDown();
这么一来容易读很多,也好看也轻便,一行写完。
但是万一人家给的输入参数是null呢?问题就来了。null.upperCase();膨,炸弹爆炸了。所以我们就必须检查输入的参数不是null。可是你检查了,怎么返回检查结果?链式编程要的就是一路点下去,不会有人来给你检查返回值的。抛异常?那和爆炸有什么两样?所以因为我们有了这个问题,我们的程序员写代码才会变成
boolean success = xxx.aaaa();
if(!success) ......
success = xxx.bbbbb();
if(!success) ......
或者try {....} catch(Exception e) {....} 倒是简单了,但有没有人听说过以前手机开发的时候是不允许用try/catch的?那是巨大的系统开销。
所以我们要的是一个一路到底的方案,不管我点多少个点,你都不要给我错误的返回值,或者异常。最后当我写:run的时候,你才告诉我对不对。这叫做Lazy方式。
那我们就想到,如果就算你给我一个null的东西,这个null的东西也能够接受一系列的操作而不崩溃呢?这就是空对象的作用了。所以当我一读到空对象,我就觉得这就是我多年来在寻找的一个东西。更多精彩文章及讨论,请光临枫下论坛 rolia.net