啊,這樣就很好懂了。來分析一下 Java 領域的 Spring:
- Spring is Simple
- Spring Boot is Easy
- Spring AOP is Easy
原始的 Spring core 是很單純簡單的,所以你才會看到這麼多 xml (因為每個設定都 explicit 寫出來)。Spring 的每一行都很簡單,但是卻需要 很多行 才能完成功能。
Spring Boot 卻很容易 (Eazy),它的一行設定可以達成很多事,很多 magical 的事發生在後面,就像 Rails 一樣。雖然寫的行數變少了,但它的每一行都很難 (Not Simple) ,你實際去 trace 就知道有多難懂和複雜。
Spring AOP (Aspect oriented programming) 是很容易的,寫幾個 annotation 就能辦到很多事,不過背後裡,它替你的程式加了許多工,等到真的去 trace 時就知道有多複雜。AOP 歸類為不簡單 (Not Simple)
基本上 Simple 優於 Easy,從長程來看的話。Simple 的程式行數多,但每一行都很好懂,所以維護的成本低。反之,如果專案的生命越短,開發人數少,Easy 就比 Simple 更有利。
如果要比較 Spring Boot 和 AOP 維護的難易度 (不是比功能,這兩個功能完全不一樣)。Spring Boot 比 AOP 好。因為 Boot 只是處理 configuration 而已,而 AOP 則是會涉入 domain logic。
configuration 基本上搞懂之後,不會影響你接手處理用戶的需求的。但 AOP 在 domain logic 玩魔術,會讓接手處理需求時很痛苦,每次改功能都要追後面有多少奇妙的 side effect 偷偷在發生。
從 Easy vs Simple 的論點來分析 Spring,我的結論是 -- Spring core 可以大膽的用,Spring Boot 也是,但 Spring AOP 則要謹慎,不要用過頭了。
當然,我說的可以大膽的用,不是代表可以惡用。早期在 Spring 盛行時,很多人把 domain logic 混入了純 Spring 寫 (後果是 xml 爆增)。而新一點的 Dependency Injection Library - Dagger2 ,我也聽說過有人用它處理 Observable (RxJava),讓 domain logic 侵入了 D.I. 。這都是惡例,小心不要踩到了。