這篇又浮上來了
method 加上參數,裡面多寫個 if 進行擴充 -- 這大概工程師每天都在做
所以我覺得這類型的還好,它要累積到一個程度之後,才要重構,看是要回到重覆或是抽得更多層。
出現問題的大部份都是太多參數,就是作者說的,抽象化錯了方向。另一種錯誤是太早將單純的 if 抽成更複雜的 class/interface,也不能說一定錯,但新需求多半不可預知,所以八成都是抽錯方向,不如不抽。
然後更難得問題是,這些修改不一定是同一個人做的…
每次只要有機會用到 micronaut, 就有一種清爽的感覺
小, 簡單, 又快. 然後還大部份和 spring 很像
如果 spring 沒有包伏然後重開機的話, 大概就是 micronaut. 而不是現在的 spring boot.
但是你就是知道它不會變 spring 成為主流, 所以只能在小專案玩玩而已...
他是說以前一定要寫 finally 去回溯/移除 自己放在 ThreadLocal 的變數,因為 Thread 多半有 pool,是大家共用的。
之後用 virtual thread 就沒人在共用了,所以 ThreadLocal 不用怕碰到別人塞的值,也不用 finally 去處理。
而你講的 sharing 是該 thread 被用的當下,很多人都想塞變數,這個的確沒變,要靠 Scope Variable 的結構減少忘記互蓋的問題。
比較在意 ThreadLocal 關聯的應用場景..
var oldValue = myTL.get();
myTL.set(newValue);
try {
...
} finally {
myTL.set(oldValue);
}
Without this imposed structure, when a thread is shared among multiple tasks, one task’s TL values might leak into another. Virtual threads solve that problem by being lightweight enough to not require sharing.
沒看懂,為何 lightweight 就不用 sharing.
Even basic control flow, like loops and try/catch, need to be reconstructed in “reactive” DSLs, some sporting classes with hundreds of methods.
RxJava 就是你
一個 class 有上百個 method 就是錯錯錯,沒什麼好說的
能夠寫正常的程式的話,誰要寫 reactive,誰要寫 async/await
Project Loom 走在正確的道路上,成功後就會換其他平台來學
virtual thread 真是讓人興奮
所以 jdbc driver 都不用改自動就會變 virtual thread ?
web request ->
socket virtual thread -> (virtually blocking)
business logic ->
jdbc request ->
driver socket virtual thread -> (virtually blocking)
然後在兩次的 virtual block 中,背後 OS thread 可能已經換過,或是沒變這樣?