單一功能原則
原則 |
---|
在面向對象編程領域中,單一功能原則(Single responsibility principle)規定每個類都應該有一個單一的功能,並且該功能應該由這個類完全封裝起來。所有它的(這個類的)服務都應該嚴密的和該功能平行(功能平行,意味着沒有依賴)。
這個術語由羅伯特·C·馬丁(Robert Cecil Martin)在他的《敏捷軟件開發,原則,模式和實踐》一書中的一篇名為〈面向對象設計原則〉的文章中給出。 [1] 馬丁表述該原則是基於的《結構化分析和系統規格》[2]一書中的內聚原則(Cohesion)上。
馬丁把功能(職責)定義為:「改變的原因」,並且總結出一個類或者模塊應該有且只有一個改變的原因。如果你能夠想到多於一個的動機去改變一個類,那麼這個類就具有多於一個的職責。一個具體的例子就是,想像有一個用於編輯和打印報表的模塊。這樣的一個模塊存在兩個改變的原因。第一,報表的內容可以改變(編輯)。第二,報表的格式可以改變(打印)。這兩方面的改變會因為完全不同的起因而發生:一個是本質的修改,一個是表面的修改。單一功能原則認為這兩方面的問題事實上是兩個分離的功能,因此他們應該分離在不同的類或者模塊里。把有不同的改變原因的事物耦合在一起的設計是糟糕的。
保持一個類專注於單一功能點上的一個重要的原因是,它會使得類更加的健壯。繼續上面的例子,如果有一個對於報表編輯流程的修改,那麼將存在極大的危險性,因為假設這兩個功能存在於同一個類中,修改報表的編輯流程會導致公共狀態或者依賴關係的改變,打印功能的代碼會因此不工作。
參見
引用
- ^ Martin, Robert C. Agile Software Development, Principles, Patterns, and Practices. Prentice Hall. 2002. ISBN 0-13-597444-5.
- ^ DeMarco, Tom. Structured Analysis and System Specification. Prentice Hall. 1979. ISBN 0-13-854380-1.