u161 - Unlimited cryptography enabled by default
是可以 workaround 不過我覺得要去改 jdk 底下的東西部署上都會很麻煩
OpenJdk 好像一直都是 unlimited 的?沒試過不知道。
Javascript "standard" 裡面寫的是不準寫 semicolon…
我發現這件事後第一個感想是: js 你們是嫌 bug 不夠多嗎??
還好 google 的指南是要求要 semicolon
踩到這個雷了。kotlin object singleton 經過 jackson deseirlaize (裡面用 reflection) 就再也不是 singleton 了
另一個有名的例子是 java8 的 java.time 的設計。
LocalDate 和 LocalDateTime 並沒有繼承關係,明明 LocalDateTime 也有 year, month, day 等等欄位,意思也很像
這篇文只能舉小例子,不過
data class CoordinatePlace(
val coordinate: Coordinate,
val place: String)
我到這邊就會停了,不會再 refactor 下去。因為像是 place.coordinate.lng
多一層存取對我來說不會是個問題,(多到兩層以上我才會開始煩惱)。
kotlin 可以用 with
, apply
等等工具減少很多不必要的 code,為了少一層開始抽 ICoordinate
不值得啊。(當然也可能是因為只能選小的範例)
-------
然後,有關繼承。OOP 寫久了之後,我的經驗是可以被設計有繼承的關係,通常是有類似的 行為
,而不是有類似的資料。
也就是說,我不傾向因為它們有很多共同的欄位,所以就用繼承來解決程式碼重用。我最少得觀察到一個以上的行為、動作,才會開始思考繼承,而且通常會變成 interface (因為只有行為,沒有資料)
為什麼會有這種結論?因為共同欄位用繼承來重用程式經不起時間的考驗,只有設計初時可以用,等到加需求後就… 真的就是補丁硬改,改不動的就 workaround,那程式碼真是令人痛心。
-------
繼續以 Coordinate
為例, 假設我們有求兩個座標距離的需求:
data class Coordinate(... omit) {
fun distanceTo(other:Coordinate): Double
}
然後有名稱的地點 CoordinatePlace
也要算距離,方法一是直接拿裡面的 coordinate
來求距離,方法二就是加上同樣的 method:
data class CoordinatePlace(val coordinate:Coordinate) {
fun distanceTo(other:Coordinate): Double {
return coordinate.distanceTo(other)
}
}
方法二可以封裝 CoordinatePlace
的 coordinate
欄位 (欄位能少曝露就少曝露),到此,distanceTo
這個 method 就會有機會抽成一個 interface,因為它是 行為 ,然後有求距離需求的 class 實作它就行了。
這種不依賴 coordinate.lng
等等內部資料的高階行為才會有資格被抽出去,也因為 method signature 沒有牽扯到太多的資料欄位,所以未來擴充時有很大的彈性。
在設計 model 之間的互動時,應該要多依賴上面 distanceTo
這種高階的行為,而不是直接開內部欄位 .lng
, .lat
給別的 model 算,沒有高階行為的 model,才是真正的 Anemic Domain Model。
ps. data class 的欄位都是 public 的,所以這個例子有點封裝失敗。不過上面的重點是行為。
多著咧:
stream().tl
---> stream().collect(Collectors.toList())
foo.ate
---> assertThat(foo).isEqualTo( )
foo.bar().gv
---> given(foo.bar()).willReturn( )
最近幾個月我們公司面試的結論是...
不用考到演算法就刷掉一半了 (是說面試我也不會問演算法就是)
台灣工程師強的是有的,但中下程度的滿坑滿谷 (below average Joe...)
大概真的是 App 工程師的需求一直都很強勁吧… 很多轉行的新鮮人,不少都是像這篇文章說的是上線上課程,按模樣學了 swift 寫了個 App 就來面試了,但不少基礎打的不太夠。
這篇提到的準備分享的項目,蠻準確的,的確是業界真正需求的人材。照著準備,面試成功率就高一點,因為這些項目又要花更多精力去學的,不是表面功夫,準備完了本來基礎就會再上一層。
不過像這位作者,面試了很多輪後,會反思,整理自己欠缺的,再補強,最後還寫了一篇 blog。具備這種特質是很有潛力的人材,在短暫的面試裡如果能夠發掘到面試者有這種特質,即使他考題表現不好,就我個人而言,還是會考慮優先錄取的。