分層結構檢視原始碼討論檢視歷史
分層結構是指一種自動化測試代碼的結構。這種結構的特點是將複雜的測試代碼分成三個單向依賴的層次,採用分層結構構建的測試代碼中的測試邏輯變得清晰,容易理解和維護。
簡介
分層結構是最為流行、應用最廣泛的應用軟件的設計方式。在應用了分層結構的系統中,各個子系統按照層次的形式組織起來,上層使用下層的各種服務,而下層對上層一無所知。每一層都對自己的上層隱藏其下層的細節。
在這個分層結構中,測試自動化代碼被分成三層:(1)測試用例層,表達應用程序的測試邏輯。(2)領域層,用業務領域術語來給待測系統建模,封裝HTTP請求、瀏覽器控制、結果解析邏輯等,給測試用例層提供一個接口。(3)待測系統層,第2層構建在這一層之上。
其實質是依據某一標準或尺度將某個社會研究客體分解分析成各種層次的科學理論規範,進而從中尋找認識主體在對研究客體進行的理性思維活動中所取得的本質經驗、規律性和各種差異的認識。分層架構在一定程度解決了傳統方案里,高耦合,低內聚等問題,為搭建結構清晰、易於維護的良性系統提供了理論基礎。 [1]
原則
針對接口編程
這裡所指的接口,不是特指編程語言中的具體語言元素(如 C#中由 Interface定義的語言接口),而是只一種抽象的,在語義層面上起着接合作用語義體。它的具體實現,可能是接口,可能是抽象類,甚至可能是具體類。 從不同的視角,接口可以有以下兩種定義:
1.接口是一定領域下行為的約定,它約定了接口的實現者必須遵循指定的契約,體現了自然界「如果你是……則必須能……」的理念。
2.接口是一定維度上同類事物的共性抽象,針對不同的維度,同類事物具有不同的展現形式,因此這裡的共性抽象是相對的。
具體到分層架構中,針對接口編程的意義是這樣的:現仍約定將 N 層架構的各層依次編號為 1、2、…、K、…、N-1、N,其中層的編號越大,則越處在上層,那麼第 K 層不應該依賴具體一個 K-1 層,而應該依賴一個 K-1 層的接口,即在第K 層中不應該有 K-1 層中的某個具體類。第 K 層的編程僅僅針對 K-1 層的接口來進行編程。
依賴倒置
在軟件設計原則中,有一種重要的思想叫做依賴倒置。它的核心思想是:不能讓高層組件依賴底層組件,而且,不管高層組件和底層組件,兩者都應依賴於抽象。
那麼,這個原則和我們上面的原則是否矛盾呢?其實並不矛盾。因為這個原則定義中的「依賴」是指「具體依賴」,而上面定義中的依賴全部指「抽象依賴」。我對這兩種依賴的定義如下:
具體依賴——如果 P 層中有一個或一個以上的地方實例化了 Q 層中某個具體類,則說 P 層具體依賴於 Q 層。 抽象依賴——如果 P 層沒有實例化 Q 層中的具體類,而是在一個或一個以上的地方實例化了 Q 層中某個接口,則說 P 層抽象依賴於 Q 層,也叫接口依賴於 Q層。
從這兩個定義可以看到,所謂的依賴倒置原則,正是上面提到針對接口編程,而不是針對實現編程,依賴於抽象而不是具體實現,兩者在本質上是統一的。
綜上所述,可以看出,本課題設計的分層架構,應該是這樣一種架構:
1.N 層架構的各層依次編號為 1、2、…、K、…、N-1、N,其中層的編號越大,則越處在上層。
2.架構中僅存在一種依賴,即第 K 層接口依賴於第 K-1 層,其中 1<K<=N。
單向逐層調用
約定將 N 層架構的各層依次編號為 1、2、…、K、…、N-1、N,其中層的編號越大,則越處在上層。那麼,我們設計的架構應該滿足以下兩個原則:
1.第 K(1<K<=N)層只能依賴於第 K-1 層,而不可依賴其他底層。
2.如果 P 層依賴 Q 層,則 P 的編號一定大於 Q。
其中第一個原則,保證了依賴的逐層性,及整個架構的依賴是逐層向下的,而不能跨層依賴。第一個原則,則保證了依賴的單向性,及只能上層依賴底層,而不能底層反過來依賴上層。
優點
1、分層結構將應用系統正交地劃分為若干層,每一層只解決問題的一部分,通過各層的協作提供整體解決方案。大的問題被分解為一系列相對獨立的子問題,局部化在每一層中,這樣就有效的降低了單個問題的規模和複雜度,實現了複雜系統的第一步也是最為關鍵的一步分解。
2、分層結構具有良好的可擴展性,為應用系統的演化增長提供了一個靈活的框架,具有良好的可擴展性。增加新的功能時,無須對現有的代碼做修改,業務邏輯可以得到最大限度的重用。同時,層與層之間可以方便地插入新的層來擴展應用。
3、分層架構易於維護。在對系統進行分解後,不同的功能被封裝在不同的層中,層與層之間的耦合顯著降低。因此在修改某個層的代碼時,只要不涉及層與層之間的接口,就不會對其他層造成嚴重影響。 [2]
封裝變化
剝離系統需要不斷變化的部分,獨立成單元,採取具體的策略進行封裝,減少變化對系統其它組成部分的影響 ,那裡變化就封裝那裡,如果沒有變化,就要避免過度封裝。
單一職責
在這個架構中,任何一個類都應具有單一的職責,屬於單獨的一層,而不能同時擔負兩種職責或屬於多個層。 開放封閉
開發-關閉原則定義為:對擴展開放,對修改關閉。 具體到分層架構中,可以描述為:當每一層有了一個新的具體實現時,它應該可以在不修改其上級調用層的情況下,與本層次可以無縫更換。[3]
視頻
網絡協議分層結構