如何写出更好的Java代码(4)

发表于:2014-05-27来源:不详作者:不详点击数: 标签:
配置管理 那现在你的代码可以编译了,仓库也搭建起来了,你需要把你的代码带出开发环境,走向最终的发布了。别马虎了,因为 自动化 执行从长远来看

  配置管理

  那现在你的代码可以编译了,仓库也搭建起来了,你需要把你的代码带出开发环境,走向最终的发布了。别马虎了,因为自动化执行从长远来看,好处是大大的。

  Chef,Puppet,和Ansible都是常见的选择。我自己也写了一个可选方案,Squadron。这个嘛,当然了,我自然是希望你们能下载下它的,因为它比其它那些要好用多了。

  不管你用的是哪个工具,别忘了自动化部署就好。

  库

  可能Java最好的特性就是它拥有的这些库了。下面列出了一些库,应该绝大多数人都会用得上。

  Java的标准库,曾经还是很不错的,但在现在看来它也遗漏掉了很多关键的特性。

  Apache Commons

  Apache Commons项目有许多有用的功能。

  Commons Codec有许多有用的Base64或者16进制字符串的编解码的方法。别浪费时间自己又写一遍了。

  Commons Lang是一个字符串操作,创建,字符集,以及许多工具方法的类库。

  Commons IO,你想要的文件相关的方法都在这里了。它有FileUtils.copyDirectory,FileUtils.writeStringToFile, IOUtils.readLines,等等。

  Guava

  Guava是一个非常棒的库,它就是Java标准库"所缺失的那部分"。它有很多我喜欢的地方,很难一一赘述,不过我还是想试一下。

  Cache,这是一个最简单的获取内存缓存的方式了,你可以用它来缓存网络访问,磁盘访问,或者几乎所有东西。你只需实现一个CacheBuilder,告诉Guava如何创建缓存就好了。

  不可变集合。这里有许多类:ImmutableMap, ImmutableList,甚至还有ImmutableSortedMultiSet,如果这就是你想要的话。

  我还喜欢用Guava的方式来新建可变集合:

  // Instead of

  final Map map = new HashMap();

  // You can use

  final Map map = Maps.newHashMap();

  有许多像Lists, Maps, Sets的静态类,他们都更简洁易懂一些。

  如果你还在坚持使用Java 6或者7的话,你可以用下Collections2,它有一些诸如filter和transform的方法。没有Jvaa 8的stream的支持,你也可以用它们来写出连贯的代码。

  Guava也有一些很简单的东西,比如Joiner,你可以用它来拼接字符串,还有一个类可以用来处理中断。

  Gson

  Google的Gson是一个简单高效的JSON解析库。它是这样工作的:

  final Gson gson = new Gson();

  final String json = gson.toJson(fooWidget);

  final FooWidget newFooWidget = gson.fromJson(json, FooWidget.class);

  真的很简单,使用它会感觉非常愉快。Gson的用户指南中有更多的示例。

  Java Tuples

  我对Java一个不爽的地方就是它的标准库中居然没有元组。幸运的是, Java tuples工程解决了这一问题。

  它也很容易使用,并且真的很赞:

  Pair func(String input) {

  // something...

  return Pair.with(stringResult, intResult);

  }

  Joda-Time

  Joda-Time是我用过的最好的时间库了。简直,直接,容易测试。你还想要什么?

  这个库里我最喜欢的一个类就是Duration,因为我用它来告诉说我要等待多长时间,或者过多久我才进行重试。

  Lombok

  Lombok是一个非常有趣的库。它通过注释来减少了Java中的饱受诟病的样板代码(注:setter,getter之类的)。

  想给你类中的变量增加setter, getter方法?太简单了:

  public class Foo {

  @Getter @Setter private int var;

  }

  现在你可以这么写了:

  final Foo foo = new Foo();

  foo.setVar(5);

  这里还有更多的示例。我还没在生产代码中用过Lombok,不过我有点等不及了。

  Play框架

  备选方案:Jersey或者Spark

  在Java中实现REST风格的WEB服务有两大阵营:JAX-RS和其它。

  JAX-RS是传统的方式。你使用像Jersey这样的东西来将注解和接口,实现组合到一起来实现WEB服务。这样做的好处就是,你可以通过一个接口就能很容易创建出一个调用的客户端来。

  Play框架是在JVM上实现WEB服务的截然不同的一种方式:你有一个routes文件,然后你去实现routes中那些规则所引用到的类。它其实就是个完整的MVC框架,不过你可以只用它来实现REST服务。

原文转自:http://it.deepinmind.com/java/2014/05/21/better-java.html