1.KLOC 2.數據防腐層 3.分治思想 4.分層架構模式思想 5.SOLID 原則 6.關注分離點
1.KLOC
定義
- KLOC 是 “千行代碼”(Kilo Lines Of Code)的縮寫。它是一種用于衡量軟件項目規模大小的指標。通過統計軟件項目中代碼的行數(以千行為單位)來對項目規模進行量化評估。例如,如果一個項目的代碼量是 5000 行,那么用 KLOC 來表示就是 5KLOC。
用途
- 項目規劃與估算
- 在項目初期,開發團隊可以根據歷史項目的 KLOC 數據以及對應的開發資源投入(如人力、時間等)來估算新項目的規模和所需的開發資源。例如,如果已知開發 1KLOC 平均需要 2 個人天,當新的項目規模預計為 10KLOC 時,就可以初步估算出大概需要 20 個人天的工作量來完成代碼編寫部分。
- 成本估算與控制
- 軟件成本在很大程度上與代碼規模有關。KLOC 可以作為成本估算的一個基礎因素。因為編寫代碼的行數越多,通常意味著需要投入更多的人力和時間,從而導致成本增加。通過對 KLOC 的統計和分析,項目經理可以更好地控制成本。例如,當 KLOC 超出預算范圍時,可以及時分析是需求變更導致代碼量增加,還是開發效率低下等原因造成的,并采取相應的措施。
- 質量評估與比較
- 一定程度上,KLOC 可以用于軟件質量的評估和比較。一般來說,在功能相同的情況下,代碼行數越少,可能意味著軟件的結構越緊湊、效率越高。不過這只是一個參考因素,因為代碼質量還與代碼的可讀性、可維護性、可復用性等諸多因素有關。例如,兩個實現相同功能的模塊,一個是 10KLOC,另一個是 15KLOC,可能 10KLOC 的模塊在代碼結構上更簡潔,但還需要進一步分析代碼的內部質量才能確定。
2.數據防腐層
- 數據防腐層(Anti - Corruption Layer,ACL)是一種軟件架構中的隔離層概念。它主要用于隔離兩個不同系統或者子系統之間的交互,防止一個系統的變化對另一個系統產生不良影響,尤其是在系統之間存在數據格式、業務邏輯、技術棧等差異的情況下。
- 就像是在兩個不同 “世界”(系統)之間設置的一個緩沖帶,這個緩沖帶能夠對數據和業務邏輯進行轉換和適配,確保兩邊的系統都能按照自己的規則和方式正常運轉,避免一方的 “規則變化” 或者 “異常” 對另一方造成干擾或者破壞。
2.1數據防腐層的組成部分與功能實現
數據轉換功能
這是數據防腐層最基本的功能之一。它能夠將一個系統的數據格式轉換為另一個系統能夠接受的數據格式。這可能涉及到數據結構的轉換、數據類型的轉換、編碼方式的轉換等。例如,將一種數據庫系統(如 MySQL)中的數據格式轉換為另一種數據庫系統(如 Oracle)能夠識別的數據格式,或者將以文本格式存儲的數據轉換為二進制格式。
業務邏輯適配功能
除了數據格式的轉換,數據防腐層還需要對不同系統之間的業務邏輯差異進行適配。比如,兩個系統對于同一業務概念可能有不同的定義和處理方式。一個系統中產品的 “價格” 可能是含稅價格,而另一個系統中的 “價格” 可能是不含稅價格。數據防腐層就需要根據系統之間的這種業務邏輯差異,對數據進行調整和適配。
接口封裝功能
數據防腐層可以對系統之間交互的接口進行封裝。它隱藏了兩個系統內部接口的復雜性和差異性,對外提供一個統一的、相對簡單的接口。這樣,兩個系統在進行交互時,只需要通過這個封裝后的接口進行通信,而不需要了解對方內部接口的詳細情況。例如,數據防腐層可以將一個系統復雜的 RESTful API 接口進行封裝,使其與另一個系統簡單的 RPC 接口能夠順利進行通信。
3.分治思想
-
基本概念
- 分治思想,即 “分而治之”(Divide and Conquer)。它的核心是將一個復雜的大問題分解為若干個規模較小、相對獨立且容易解決的子問題。這些子問題的性質與原問題相同,然后分別解決這些子問題,最后將子問題的解合并起來得到原問題的解。
- 例如,在計算一個大型數組的排序問題時,可以將這個數組不斷地拆分成更小的子數組,直到子數組的規模小到可以輕易地進行排序(如只有 1 個或 2 個元素)。這就像把一個龐大的任務(對整個數組排序)分解成了許多小任務(對小的子數組排序)。
-
在算法設計中的體現
- 排序算法中的應用
- 以歸并排序(Merge Sort)為例,這是一種典型的基于分治思想的排序算法。它首先將一個數組分成兩個長度大致相等的子數組,然后對這兩個子數組分別進行排序(這兩個子數組的排序也是通過同樣的分治過程,不斷劃分更小的子數組來完成)。當子數組排序完成后,再將兩個有序的子數組合并成一個有序的大數組。整個過程不斷地將問題劃分,解決子問題,最后合并結果。
- 搜索算法中的應用
- 二分搜索(Binary Search)也是分治思想的體現。對于一個有序數組,要查找某個目標元素。它每次將數組分成兩部分,通過比較目標元素和中間元素的大小,確定目標元素可能在左半部分還是右半部分。然后繼續在確定的那一半數組中進行同樣的劃分和搜索操作,直到找到目標元素或者確定目標元素不存在。
-
在軟件系統設計中的應用
- 功能模塊劃分 :根據頁面的功能將前端代碼劃分為不同的模塊。例如,在一個電商網站前端,可以劃分為商品列表模塊、購物車模塊、用戶訂單模塊等。每個模塊可以有自己獨立的 HTML、CSS 和 JavaScript 代碼。
- 組件化開發 : 在現代前端框架(如 React、Vue)中,采用組件化開發是分治思想的很好體現。可以將頁面中的一個按鈕、一個表單或者一個導航欄等都作為一個獨立的組件進行開發。每個組件都有自己的狀態和行為,然后將這些組件組合起來構成完整的頁面。
- 分布式系統設計:在分布式系統中,分治思想更為明顯。例如,一個分布式數據庫系統為了處理海量的數據存儲和查詢任務,會將數據分散存儲在多個節點上。每個節點負責存儲和處理一部分數據,這相當于把數據存儲和查詢這個大問題分解到各個節點上的小問題。當需要查詢數據時,系統會協調各個節點,將各個節點的查詢結果合并起來得到最終的結果。
-
優勢
- 降低問題復雜度 通過將大問題分解為小問題,使得每個小問題的復雜度降低。這樣更容易理解和解決問題,就像把一個復雜的拼圖拆分成許多小的拼圖塊,每個小拼圖塊的拼接難度就比整個大拼圖的拼接難度小很多。
- 便于并行處理 分解后的子問題很多時候可以并行地解決。例如,在多核處理器的計算機上,對多個子問題同時進行處理,可以大大提高處理效率。在分布式系統中,不同的節點可以同時處理各自負責的子問題,加快了整個系統的運行速度。
- 提高系統的可維護性和可擴展性 分治后的模塊或子問題相對獨立,當需要修改或擴展系統的某一部分功能時,只需要對相應的子模塊或子問題進行處理,不會對其他部分造成太大的影響。比如,在電商系統中,如果要增加一種新的支付方式,只需要在支付模塊中進行修改,而不需要對整個電商系統進行大規模的改動。
5.SOLID 原則
定義:SOLID 是面向對象設計的五大基本原則的縮寫,雖然它主要用于后端開發中的面向對象編程,但在前端開發中也有一定的應用。
- 單一職責原則(Single Responsibility Principle,SRP):一個類或者模塊應該只有一個引起它變化的原因。在前端開發中,這意味著一個組件或者函數應該只負責一個功能。例如,一個用于驗證用戶輸入的函數就只應該負責驗證輸入是否符合要求,而不應該同時負責發送驗證后的輸入數據到服務器。
- 開閉原則(Open - Close Principle,OCP):軟件實體(類、模塊、函數等)應該對擴展開放,對修改關閉。在前端開發中,比如一個組件庫,當需要添加新的組件類型時,應該能夠通過擴展的方式添加,而不是修改已有的組件代碼。例如,一個 UI 組件庫已經有了按鈕組件和文本框組件,當要添加一個新的下拉菜單組件時,應該通過創建新的代碼來實現這個組件,而不是去修改按鈕組件和文本框組件的代碼。
- 里氏替換原則(Liskov Substitution Principle,LSP):子類型必須能夠替換它們的父類型。在前端的繼承關系或者接口實現中,這一原則很重要。例如,在一個前端框架中定義了一個抽象的圖形組件接口,具體的圓形組件和方形組件都實現了這個接口,那么在使用這些組件的代碼中,圓形組件和方形組件應該可以相互替換,而不會影響系統的正常運行。
- 接口隔離原則(Interface Segregation Principle,ISP):客戶端不應該被迫依賴于它不使用的接口。在前端開發中,例如一個前端插件提供了多個功能接口,但是某個具體的頁面只需要其中的部分功能,那么這個插件應該將接口進行隔離,使得頁面只需要依賴它所需要的接口,而不是全部接口。
- 依賴倒置原則(Dependency Inversion Principle,DIP):高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象;抽象不應該依賴細節,細節應該依賴抽象。在前端框架的設計或者組件之間的依賴關系中,這一原則有助于降低耦合度。例如,在一個前端應用中,高層的業務邏輯組件不應該直接依賴于具體的底層數據獲取組件,而是應該通過抽象的接口來獲取數據,這樣當數據獲取方式發生變化時,只需要修改實現抽象接口的具體組件,而不會影響業務邏輯組件。
意義:
- 提高代碼質量:遵循 SOLID 原則可以使前端代碼更加健壯、靈活和可維護。代碼結構更加合理,減少了代碼的耦合度,使得代碼在面對需求變化和功能擴展時更加穩定。
- 便于測試和復用:代碼的單一職責使得測試更加容易,因為每個功能單元的功能明確。同時,符合開閉原則等使得代碼更容易被復用,例如符合開閉原則的組件可以方便地在其他項目或者功能模塊中進行擴展和復用。
6 關注分離點(和分治思想一樣也是一種分解方式)
- 關聯
- 與分治思想有一定的關聯。分治思想是將一個復雜的問題分解為多個子問題分別解決,關注分離點也是一種分解方式,它將軟件系統的開發關注點分解為內容結構、表現形式和交互行為這幾個方面。同時,關注分離點也有助于實現單一職責原則,因為每個部分(HTML、CSS、JavaScript)都有自己明確的職責范圍,避免了一個代碼段承擔多種不相關的功能。
- 區別
- 與分治思想不同的是,關注分離點更側重于從功能性質(內容、樣式、交互)的角度進行分離,而分治思想可以應用于更廣泛的問題分解,如將一個大型應用按照功能模塊(用戶管理模塊、訂單管理模塊等)進行分解。與單一職責原則相比,關注分離點主要是針對網頁開發中的三種不同類型的職責(結構、樣式、交互)進行劃分,而單一職責原則更強調在代碼單元(類、函數等)層面上一個單元只負責一個功能。