如何寫出更好的Java代碼(5)

發表于:2014-05-27來源:不詳作者:不詳點擊數: 標簽:
它同時支持Java和Scala。它優先使用Scala這點可能有點令人沮喪,但是用Java進行開發的話也非常不錯。 如果你習慣了Python里的Flask這類的微框架,那么你應該

  它同時支持Java和Scala。它優先使用Scala這點可能有點令人沮喪,但是用Java進行開發的話也非常不錯。

  如果你習慣了Python里的Flask這類的微框架,那么你應該會對Spark感到很熟悉。有了Java 8它簡直如虎添翼。

  SLF4J

  Java打印日志有許多不錯的解決方案。我個人最喜歡的是SLF4J,因為它是可挺插拔的,并且可以同時混合不同的日志框架中輸出的日志。有個奇怪的工程同時使用了java.util.logging, JCL, 和log4j?沒問題,SLF4J就是為它而生的。

  想入門的話,看下它的這個兩頁的手冊就足夠的了。

  jOOQ

  我不喜歡很重的ORM框架,因為我喜歡SQL。因此我寫了許多的JDBC模板,但它們很難維護。jOOQ是個更不錯的解決方案。

  你可以在Java中以一種類型安全的方式來書寫SQL語句:

  // Typesafely execute the SQL statement directly with jOOQ

  Result> result =

  create.select(BOOK.TITLE, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)

  .from(BOOK)

  .join(AUTHOR)

  .on(BOOK.AUTHOR_ID.equal(AUTHOR.ID))

  .where(BOOK.PUBLISHED_IN.equal(1948))

  .fetch();

  將它以及DAO模式結合起來,你可以讓數據庫訪問變得更簡單。

  測試

  測試對軟件來說至關重要。下面這些庫能讓測試變得更加容易。

  jUnit 4

  jUnit就不用介紹了。它是Java中單元測試的標準工具。

  不過可能你還沒有完全發揮jUnit的威力。jUnit還支持參數化測試,以及能讓你少寫很多樣板代碼的測試規則,還有能隨機測試代碼的Theory,以及Assumptions。

  jMock

  如果你已經完成了依賴注入,那么它回報你的時候來了:你可以mock出帶副作用的代碼(就像和REST服務器通信那樣),并且仍然能對調用它的代碼執行斷言操作。

  jMock是Java中標準的mock工具。它的使用方式是這樣的:

  public class FooWidgetTest {

  private Mockery context = new Mockery();

  @Test

  public void basicTest() {

  final FooWidgetDependency dep = context.mock(FooWidgetDependency.class);

  context.checking(new Expectations() {

  oneOf(dep).call(with(any(String.class)));

  atLeast(0).of(dep).optionalCall();

  });

  final FooWidget foo = new FooWidget(dep);

  Assert.assertTrue(foo.doThing());

  context.assertIsSatisfied();

  }

  }

  這段代碼通過jMock設置了一個FooWidgetDependency ,然后添加了一些期望的操作。我們希望dep的call方法被調用一次而dep的optionalCall 方法會被調用0或更多次。

  如果你反復的構造同樣的FooWidgetDependency,你應該把它放到一個測試設備(Test Fixture)里,然后把assertIsSatisfied放到一個@After方法中。

  AssertJ

  你是不是用jUnit寫過這些?

  final List result = some.testMethod();

  assertEquals(4, result.size());

  assertTrue(result.contains("some result"));

  assertTrue(result.contains("some other result"));

  assertFalse(result.contains("shouldn't be here"));

  這些樣板代碼有點太聒噪了。AssertJ解決了這個問題。同樣的代碼可以變成這樣:

  assertThat(some.testMethod()).hasSize(4)

  .contains("some result", "some other result")

  .doesNotContain("shouldn't be here");

  連貫接口讓你的測試代碼可讀性更強了。代碼如此,夫復何求?

  工具

  IntelliJ IDEA

  備選方案: Eclipse and Netbeans

  最好的Java IDE當然是 IntelliJ IDEA。它有許多很棒的特性,我們之所以還能忍受Java這些冗長的代碼,它起了很大的作用。自動補全很棒,< a href="http://i.imgur.com/92ztcCd.png" target="_blank">代碼檢查也超贊,重構工具也非常實用。

  免費的社區版對我來說已經足夠了,不過在旗艦版中有許多不錯的特性比如數據庫工具,Srping框架的支持以及Chronon等。

  Chronon

  GDB 7中我最喜歡的特性就是調試的時候可以按時間進行遍歷了。有了IntelliJ IDEA的Chronon插件后,這個也成為現實了。當然你得是旗艦版的。

  你可以獲取到變量的歷史值,跳回前面執行的地方,獲取方法的調用歷史等等。第一次使用的話會感覺有點怪,但它能幫忙你調試一些很棘手的BUG。

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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97