《Effective Java》这本书总结了很多Java开发中编写高质量代码的经验,在实际阅读中,能看到很多开发中实实在在会遇到的问题,这本书提供一个很好的解决思路。
    比如能被序列化的线程安全类,被序列化后是否还是单例。以往在开发的时候,构造单例模式(饿汉式)都只是将构造方法私有化,再提供一个静态方法获取这个单例对象。但是,如果希望这个类能被序列化,如何保证反序列化之后还是单例?书中提供的思路是使用枚举——既能保证线程安全,也能保证被反序列化后还是单例。还有很多在开发中经常会遇到的问题,书中给出了一些建议和约定,如重写equals时遵守的约定、重写equals时总要覆盖hashCode、实现Comparable接口去实现比较规则等。给我最深的感受是对枚举类型的使用,它天生不可变,在以往的开发中,我对枚举的使用并不多,阅读之后会更多的使用枚举的这些特性。
    在我阅读这本书的时候,能感觉到书中的指示会让开发者在团队开发中,去写出更便于维护、便于其他人读懂的代码,而不仅仅是约束个人开发者的开发规范,很多建议都是为了实现让代码“词能达意”,减少团队中其他开发人员的阅读理解代码的成本,如编写API文档注释、使用静态方法代替构造方法、遵守普遍接受的命名习惯等。书中也有一些建议,在我目前的开发中并不是经常能遇到,这些建议更多是为框架开发者提供一些思路,在现阶段开发经验没那么丰富时,我觉的不应该急于求成,而应该积累经验,真正遇到这些问题的时候再返回来翻翻书本中的指示。
    最后引用一段书中的引用做结束语——“不要去计较效率上的一些小小的的是,不成熟的优化才是一切问题的根源”,希望以后的开发中,能够写出结构优美、设计良好的代码!

    Clean Code 书评
    《Clean Code》开篇就提出了Later equals never的概念,告诫读者不能等到不得不重构代码的时候,才考虑去这么做。好的代码应该遵从易读、易维护、高性能高可靠的原则。
    在优质代码的编码中,作者给我们提供了很多参考建议。有意义的命名、规范方法、类、模块——专注做一件事、消除重复等。项目中有很多需要命名的对象,变量、方法、参数、类,作者希望通过命名就可以告诉别人,它存在的作用和意义。
    对于函数,作者的建议是短小,一个方法做好一件事,20行左右代码最佳。这点对我的启发很大,我在实际开发的时候,方法长度的控制上很欠缺,不自觉地一个方法就几十行,在以后的开发中,会多注意在写一个方法的时候就去优化它,尽量的去复用方法。结合到自己最近开发的发送短信、邮件、站内信这方面的需求,应该把发送邮件、短信、站内信三个功能分别封装到三个方法中,而不易一昧的堆积在一个方法里,这样只会让方法很臃肿、难以阅读、难以维护。
    关于错误的处理,作者建议要有充足的日志,记录错误以及判断错误来源,作者建议不要再方法中返回null值,不如直接抛出异常,或者返回特例。现在反思自己的代码,的确有很多不足之处。直接返回null不仅不能准确表达语义,还有很大的可能造成NPE错误,再我们的系统中返回null并不少见,我也遇到过由此引发的bug。
    能够写出既实现需求,又整洁、可读性高、可维护扩展的代码,需要长时间的经验积累。开发的时候,不能一昧的追求速度,有时候也要慢下来,想一想怎么能提高代码质量。以后的开发中会更加注意,加油!