關注點分離

維基百科,自由的百科全書
(重新導向自 分离关注点)
跳至導覽 跳至搜尋

關注點分離(Separation of concerns,SOC)是對只與「特定概念、目標」(關注點)相關聯的軟體組成部分進行「標識、封裝和操縱」的能力,即標識、封裝和操縱關注點的能力。是處理複雜性的一個原則。由於關注點混雜在一起會導致複雜性大大增加,所以能夠把不同的關注點分離開來,分別處理就是處理複雜性的一個原則,一種方法。

關注點分離在計算機科學中,是將計算機程序分隔為不同部份的設計原則,是物件導向的程序設計的核心概念。每一部份會有各自的關注焦點。關注焦點是影響計算機程式代碼的一組資訊。關注焦點可以像是將代碼優化過的硬體細節一般,或者像實例化類別的名稱一樣具體。展現關注點分離設計的程序被稱為模組化程序。模組化程度,也就是區分關注焦點,通過將資訊封裝在具有明確界面的程序代碼段落中。封裝是一種資訊隱藏手段。資訊系統中的分層設計是關注點分離的另一個實施例(例如,表示層,業務邏輯層,數據訪問層,維持齊一層)。分離關注點使得解決特定領域問題的代碼從業務邏輯中獨立出來,業務邏輯的代碼中不再含有針對特定領域問題代碼的調用(將針對特定領域問題代碼抽象化成較少的程式碼,例如將代碼封裝成function或是class),業務邏輯同特定領域問題的關係通過側面來封裝、維護,這樣原本分散在整個應用程式中的變動就可以很好的管理起來。

關注點分離的價值在於簡化計算機程序的開發和維護。當關注點分開時,各部份可以重複使用,以及獨立開發和更新。具有特殊價值的是能夠稍後改進或修改一段代碼,而無需知道其他部分的細節必須對這些部分進行相應的更改。

實作[編輯]

物件導向設計,或編程語言提供的模組化提供開發人員選用的SOC機制。例如,C#,C++,Delphi和 Java等物件導向的編程語言可以將關注點分解為物件,像 MVC 或 MVP這樣的架構設計模式,將內容從呈現和數據處理(模型)與內容分開。服務導向的設計可將關注點分解為服務。諸如 C 和 Pascal 之類的程序式編程語言可將關注點分成程序或功能。面向方面的編程語言可以將關注點分解為方面和對象。

在許多其他領域,例如城市規劃、建築,分離關注點也是一個重要的設計原則。目標是更有效地理解,設計和管理許多功能相互依存的複雜系統,以便功能可以重用,獨立於其他功能進行優化,並且避免其他功能的潛在故障。常見的例子包括將一個空間分隔成多個房間,這樣一個房間的活動不會影響其他房間的人;或是配電將爐子保持在一個電路,而燈光則保持在另一個電路上,這樣爐子的超載就不會影響燈光。房間分隔的例子顯示了封裝,其中一個房間內的資訊(無論有多混亂)不會用於其他房間,除非通過界面(門是接口)。電路的例子表明,一個模組內部的活動是一個電力消費者附加的電路,不會影響不同模塊中的活動,因此每個模組不會額外去關注另一個模塊發生的情況。

起源[編輯]

例子[編輯]

網際網路協議堆疊[編輯]

HTML,CSS,JavaScript[編輯]

主題導向的編程[編輯]

方面導向的編程[編輯]

軟體構成自動化[編輯]

人工智慧中的分析水準[編輯]

規範化系統[編輯]