關注點分離是日常生活和生產中廣泛使用的解決複雜問題的一種系統思維方法。大體思路是,先將複雜問題做合理的分解,再分別仔細研究問題的不同側面(關注點),最後綜合各方面的結果,合成整體的解決方案。在概念上分割整體以使實體個體化的觀點可以追溯到柏拉圖。柏拉圖把探究自然比作在關節處切割自然,竅門在於要找到關節,不要像生疏的屠夫那樣把關節切得粉碎。莊子在庖丁解牛寓言中也闡釋了類似的真知灼見。 作爲最重要的計算思維原則之一,關注點分離是計算科學和軟體工程在長期實踐中確立的一項方法論原則。此原則在業界更多的時候以分而治之的面目出現,即將整體看成爲部分的組合體並對各部分分別加以處理。模組化是其中最有代表性的具體設計原則之一。
關注點分離(Separation of concerns,SOC)是對只與「特定概念、目標」(關注點)相關聯的軟體組成部分進行「標識、封裝和操縱」的能力,即標識、封裝和操縱關注點的能力。是處理複雜性的一個原則。由於關注點混雜在一起會導致複雜性大大增加,所以能夠把不同的關注點分離開來,分別處理就是處理複雜性的一個原則,一種方法。
關注點分離是物件導向的程式設計的核心概念。分離關注點使得解決特定領域問題的程式碼從業務邏輯中獨立出來,業務邏輯的程式碼中不再含有針對特定領域問題程式碼的呼叫(將針對特定領域問題程式碼抽象化成較少的程式碼,例如將程式碼封裝成function或是class),業務邏輯同特定領域問題的關係通過側面來封裝、維護,這樣原本分散在在整個應用程式中的變動就可以很好的管理起來。 [1]
物件導向設計,或程式語言提供的模組化提供開發人員選用的SOC機制 機製。例如,C#,C++,Delphi和 Java等物件導向的程式語言可以將關注點分解爲物件,像 MVC 或 MVP這樣的架構設計模式,將內容從呈現和數據處理(模型)與內容分開。服務導向的設計可將關注點分解爲服務。諸如 C 和 Pascal 之類的程式式程式語言可將關注點分成程式或功能。面向方面的程式語言可以將關注點分解爲方面和物件。
在許多其他領域,例如城市規劃、建築,分離關注點也是一個重要的設計原則。目標是