消極架構和關於程式碼的假設 - Matthias Noback - 部落格

banq發表於2018-12-18

在Michael Feathers的消極架構中,他列舉了Haskell(函數語言程式設計)中提到IO Monad作為一個例子,在物件導向程式設計中也有類似的例子,透過使用分層和依賴注入等原則,你也可以“保證”某個層中的某個類不會執行做什麼事情(單一職責)。下面是該文所舉的幾個例子:

1. 一個物件的建構函式應該沒有任何邏輯,只是接受入參並分配給類的屬性。

2. 如果一個物件被注入了很多的依賴者,那麼它也不會靜態地獲取依賴項。

3. 如果類沒有標記final,它至少就會有一個子類。
這將是消極架構的一個很好的例子:“你會發現我們從不擴充套件類,除非它們是非final”,當我看到一個類似“裸體”的或沒有final 宣告時,我假設它至少會有一個子類。如果沒有,也在遺留專案中,否則我就要新增final給它,作為保護其設計和防止濫用的第一步。

4.如果某個屬性未標記為”私有“,則至少一個子類會使用這個屬性
當我看到一個protected屬性時,我認為它是需要的並且實際上是由其中一個子類使用的。如果您可以將此規則應用於您的專案,那將非常有用。一個有用的方面是您的IDE或靜態分析工具將能夠將某些屬性標記為未使用

5.沒有類會使用不屬於其已釋出介面的方法

6.如果一個物件有一個public方法,它就沒有任何public static方法

總結
我認為“消極架構”是一種看待應用程式的有趣方式。此外,列舉上述例子對我來說是一個令人驚訝的練習。據我所知,這些規則並未寫入任何大型程式設計書籍中。但我們仍然依靠他們生活,並創造出我們應用程式中存在與否的一種情景:什麼可以或不可能發生在他們身上。

這非常有用,因為它使我們更安全地更改程式碼。因此,在進行重構和進行程式碼審查時,定期驗證和實施這些規則是個好主意。

 

相關文章