間接不是抽象
這篇文章認為介面interface代表的間接和abstract代表的抽象並不是一回事,間接是為了分離,鬆耦合,而抽象是為了將細節剝離。這是軟體設計中兩個不同維度。然後他談了這兩種情況的四個組合:
沒有間接但是又抽象,也就是直接但抽象,他以String為例子,字串很直接但很抽象,可以代表很多東西:人的姓名、訊息等等,但是直接依賴java.lang.String型別的程式碼不能移植到Swift / Go / C#。
依賴倒置原則:高階模組不應該依賴於低階模組。兩者都應該取決於抽象。與直接和間接無關。
什麼時候使用間接?
- 您的元件因不同原因而發生變化時,在它和其他每個元件之間使用間接。
- 當您的元件無關緊要時,或者當它們不需要更改時,可以使它們直接相互關聯。
- 如果您不知道某個元件是否會發生變化,使用直接。
什麼時候使用抽象?
- 您不需要解決通用問題時,讓元件具體化。
- 當您需要通過多種排列解決非常類似的問題時,讓元件變得抽象。
- 如果您不知道是否需要解決一系列問題,就使用具體。
讓您的軟體儘可能簡單,直到它變得更加複雜。無論是開發還是使用,複雜的軟體都是非常昂貴和痛苦的。