• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 如何寫出更好的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

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>