介面隔離原則
ISP (Interface Segregation Principle)
假設 User1
只用了 op1()
、User2
只用了 op2()
、User3
只用了 op3()
在目前這樣的依賴且是靜態語言的狀況下,User1 並不使用 op2()
& op3()
,但是在原始碼上卻依賴的他們。所以當修改了 op2()
時,仍然需要重新編譯 User1
,儘管 op1()
沒有改變。
分離
User1
的原始碼依賴的對象改成 User1Ops
,因此 OPS
中當對於 User1
不關心的的部分做修改,就不會導致要重新編譯 User1
ISP 和程式語言 / ISP 和架構
上面的問題描述,顯然取決於語言類型。像是 Java / swift 這樣的靜態語言,在編寫時,必須使用 import / include,這樣就宣告建立了原始碼的依賴關係,使得必須要重新編譯或部署。
一般來說,如果你所依賴的模組包含了超過你所需要的,那就是有害。對於原始碼如此,對於架構層級也是如此。
總結
包包中帶了你不需要的東西,你卻(背)依賴這樣的包包,就可能導致你(覺得很重)未曾想過的麻煩
… 在第 13 章「元件內聚性」討論「共同重複使用原則」時,會更詳細的討論
這章節好短 XD
重點是,抓住需要用的面向就好,不要直接用瑞士刀
前陣子好忙,快告一段落了,避免四月沒有文章,趕緊補了這篇(疑