分享

[鐵法煉金] 自己的框架自己拼

前言
雖然入行IT不過五年,但是自認爲見證了不少框架從公佈到流行甚至淘汰。想著自己能不能靠著現有的開源庫拼凑出讓自己喜歡的框架。雖然現在的工作崗位不在需要自己從零開始開發功能模塊,但是我實在很懷念開發新模塊,寫新功能,甚至優化系統現有的框架。用了不少框架后發現框架提供的功能其實很容易被其他的模塊代替,所以想試試自己拼拼看。

選擇
編程語言: java 
就學時期接觸過幾個語言,但是 java 卻是其中讓我最受益良多的,所以主要還是選擇 java。過程中可能會加入polyglot 要素,後期可以使用不一樣的語言開發後端模塊也説不定。
build system: maven
雖然 java 生態有 gradle, sbt 之類的新秀,但是我最喜歡的還是 maven, 不太想要爲了一個新的 build system 多學一個 dsl。那很累
library
核心: vert.x 生態
Vert.x 在 java 圈算是新秀吧,雖然最近出了 4.0 版本。 其主要的賣點就是 asynchronous 異步處理, 可以想象成多綫程版NodeJS。
Object Relational Mapping
Apache Cayenne:
現在的主流框架一談到 ORM 馬上就會想到 hibernate/JPA 體系,而Hibernate 結合 Spring Data 確實也非常强大,但總的來説我不太喜歡 spring 和 hibernate,主要是依賴的library偏多。 這裏選擇比較冷門的 Apache Cayenne, 他的 Modeler 工具非常方便,免去手動寫 entity的麻煩。
Inversion of Control/Dependency Injection
Google Guice
Guice 跟 Spring Core 相似,也是 IoC container, 主要讓我們方便注入依賴。

library 選擇上的痛點
vert.x 體系本身是一個小巧而且好用的工具,但是作爲 servlet/jsp 背景的工程師一開始也很難習慣異步編程。vert.x 主要依賴 event loop工作(這點跟 nodejs 一樣),所以一旦有什麽 IO的情況就必須藉助綫程池 (ExecutorService/WorkerExecutor)。 java 原生的 jdbc至今并沒有對non blocking io 做任何支持所以唯有讓別的綫程來訪問DB。
所以下面這段spring 代碼如果代入到 vert.x 體系
  

public SomeEntityResult someServiceMethod(int id){

    return someRepository.findById(id);

}

會變成
  

public Promise<SomeEntityResult> someServiceMethod(int id){

    return workerExecutor.executeBlocking(promise->{

        SomeEntityResult ser = someRepository.findById(id);

        promise.complete(ser);

    },false);

}

上面這段代碼看起來就有點詭異,需要時間適應。
#框架  #JAVA  #framework 
分類:學習

本職為全棧式工程師,來自馬來西亞。總會逼著自己去瞭解新IT圈子新事物,是個偏執的技術人。

評論
下一篇
  • [土法煉金] 開工
  • 更多文章
    載入中... 沒有更多了