haocheng 積分 0 編輯於

這裡有相關的問卷: Local Variable Type Inference for Java1

看來有幾種選項,我個人是比較喜歡 var/val 啦,就像 Scala/Kotlin 一樣

IngramChen 積分 0 編輯於

這個喔,var 在 java 不是 keyword,所以如果有人很無聊在 java 8 之前這樣寫程式:

class Container<var> {
  void add(var x) {
    var y = x;
  }
}

然後到 java 9 裡就 compile error 了吧

IngramChen 積分 1

play+akka+cassandra

不過它的 API 寫起來很奇怪,而且程式排起來也不會很清楚…

public interface HelloService extends Service {
    ServiceCall<NotUsed, String, String> sayHello();

    default Descriptor descriptor() {
        return named("hello").with(
                namedCall("hello", sayHello())
        );
    }
}

Generic parameter 用到三個… 可讀性已經變差了。

Java 8 Stream API 也是很多 generic parameter (多到四個),但是開發者使用 API 時卻藏得很好,程式碼很乾淨。

lagom 的 API 一時之間很難吃的下去,也許要用 scala 腦去思考?還有,因為 API 大多是 async 的緣故,程式碼也是開始堆了好幾層:

public <Id, Request, Response> ServerServiceCall<Id, Request, Response> authenticated(
    Function<User, ServerServiceCall<Id, Request, Response>> serviceCall) {
  return HeaderServiceCall.composeAsync(requestHeader -> {

    // First lookup user
    CompletionStage<Optional<User>> userLookup = requestHeader.principal()
        .map(principal -> userStorage.lookupUser(principal.getName()))
        .orElse(completedFuture(Optional.empty()));

    // Then, if it exists, apply it to the service call
    return userLookup.thenApply(maybeUser -> {
      if (maybeUser.isPresent()) {
        return serviceCall.apply(maybeUser.get());
      } else {
        throw new Forbidden("User must be authenticated to access this service call");
      }
    });
  });
}

看這些程式碼,我實在吃不下去,上面只有三個 if 邏輯而已,卻要寫成這副德性…

alexliang 積分 0

台灣也有人在學這個語言阿... 在台灣真是超小眾的

linus 積分 0

如果是買來的套裝軟體, DB 就沒法選擇啦

chchwy 積分 1

「分散式模式下的程式碼合併會如此的乾淨整潔。答案無它,分散式的資料結構更適合這樣的任務」

突然迸出這句話,然後接下來沒有任何進階的說明,我有點愣住....沒頭沒尾的...

haocheng 積分 0

如果真的很在乎授權費用的話,DB 有其他更好的選擇啊...

popcorny 積分 0

最大的問題是離開Windows後,沒有方便的SQL Server管理工具

linus 積分 0

如果這樣可以省 windows server cal. 應該有競爭力.

haocheng 積分 0

有道理,會用 SQL Server 的公司大概全部都是用 Windows 的解決方案吧...

ickxlin 積分 0

離開了MS的領土這東西還有競爭力嗎?

haocheng 積分 0

沒想到有生之年可以看到 SQL server 跑在 Linux 上...

j0n 積分 2 編輯於

我也覺得 js 已經夠慘烈了,竟然在他的基礎上弄了個後端?! 有這麼多優秀的語言為什麼一定要選 js 啊?.... XD

IngramChen 積分 3

先有其他語言背景的人,再去寫 js 通常會吐血…

ickxlin 積分 1

覺得先天失調+1!這貨長踞瀏覽器語言首選不就是歷史原因嗎?竟然還有人幫它弄出一個後端也包了的框架!

j0n 積分 2

我不喜歡nodejs, JavaScript實在不是一個適合寫後端程式的語言,天生就失調... (雖然我這麼說搞不好會引戰 XD)

kaif 積分 0

Sorry, the page you were looking for in this blog does not exist. Home

chchwy 積分 0

驚,批兔是個板還是??

IngramChen 積分 0

太晚知道了…

不過 cache 的最大問題還是在 distributed eviction 和 versioning…

IngramChen 積分 11 編輯於

十年前 Rod Johnson 說了 J2EE is dead,然後就有了 SpringFramework,當時成為一股風潮。之後 JEE 6 好不容易有跟上的聲勢 (加了一堆 Spring/Hibernate 的概念),一堆 JEE 傳教士紛紛跑出來說不該再用 Spring …

時至今日,cloud 已是佈署的基本款,不管你有沒有用 docker/microservice,你都會想用小 server 裝個小服務 (因 cloud 很適合開一堆小 VM)。什麼都全包的 JEE container 忽然間失去了魅力。然而 Spring 卻在這時推出了 Spring Boot,一整個打中潮流和需求點,於是 JEE 再度被 Spring 打敗一次。這篇文章也點出大廠都不把心力放在 JEE 上了,跑去搞 cloud,JEE8/9 沒有任何下文…

Spring 當初打的名號是 lightweight container,每個元件都是可以隨需求自己加上去,不用硬包在一起,這個起步式在十幾年前是對的,到了現在還是對的。這並不是風水輪流轉的緣故,而是這是軟體界永遠不變的真理。

Spring 中期也是搞錯好幾次方向,像是 Ruby on Rails 剛興起時,Spring 也跟風去搞什麼 Groovy,然後又做 command line 工具 spring root,可以像 Rails 一樣幾個指令就生一個 scaffolding。結果 Rails 潮流結束後這些東西就乏人問津。接下來 Spring 又去搞 OSGi,這也是浪費了無數的資源,去完成一件錯誤的產品 (太難懂、太難用、沒有迫切需求… ),接下來就被 VMWare 給買下了。

話說回來,Spring Boot 這新產品很受大家喜歡,歷經中期一連串的失敗還能再站起來還真是不簡單。Spring Boot 當然是跟上現在的 cloud/microservice 潮流才會起飛,但這產品在十年前出的話,我自己也會想用,所以也不盡然是風潮的關係。我想是因為它真正解決了問題 (簡化設定和佈署),又沒有增加任何難度 (你不用再多學一套工具像是 docker 什麼的,它終究是個 .jar 而已)。

----

老骨頭講古講完了… 說實在的,新生代 web 開發者選擇後端的話,通常是 nodejs > rails > 其他平台 這種順序,Spring 再好也是老骨頭才會去選吧。