主要分析存在多個版本特性時的軟體構建策略。多個版本特性在有些情況下僅僅對應於軟體的本地化,複雜的情況就是不同版本中模組的業務邏輯、呈現策略都不相 同。這不僅在產品開發過程中增加成本,更多的成本將在維護階段體現出來。因此,選擇乙個合適的構建策略對降低開發與維護成本都是非常重要的。
不同的版本採用不同的**,通過派生或直接使用不同的**實現。每個版本都會對應到乙份的這個版本相關的**。在**發布成產品時,我們還需要乙個build過程,將原始碼打包發布成可執行檔案。
這裡體現多版本特性的**可能簡單可能複雜,關鍵要看軟體整體的設計對多版本的支援。
模組a能訪問到本地策略,根據不同版本的差異實現local1、local2來實現具體的使用者需求。
這裡存在幾個問題。
一、系統中的層次結構很複雜,如果模組e同樣也需要根據版本特性來確定自己的行為,這時可能有兩種方式:將ilocal層層傳遞,從a到c再到e;採用singleton模式。不過這兩種方式都破壞了物件的封裝性。
二、ilocal中的方法會非常多。系統中所有的版本差異都將放到ilocal的方法中,很快這些方法就會失去控制。那是否可以對特性分類處理呢,將某一類特性放到乙個介面中可以降低ilocal的管理成本,但沒有從本質上解決問題。
三、local實現類會隨著專案的推進,或者在維護過程中變得臃腫。在專案過了幾年之後,這點就成為頑疾了。
編譯指令是乙個非常輕便的方式。在很多著名的商業化產品中都會出現,尤其是在處理作業系統不同版本的時候。
使用編譯指令不會出現strategy模式中出現的問題,但是需要小心控制它的使用範圍。更加嚴重的乙個問題是,版本非常多的時候(比如幾十個)編譯指令就成了可讀性的殺手。同時增加了build過程的成本與錯誤率。總之,選擇這種方式之前必須慎重考慮。
不同的版本採用同乙份** ,build後得到可執行的檔案。但這裡得到的可執行檔案並不是最終的發布產品。可執行檔案加上配置資訊才能符合使用者的需求。這種情況下,開發人員不僅需要開發**,而且需要設計配置檔案的格式(模組的可配置能力)。
基於配置的軟體構建同樣需要在整體設計上的考慮。並且有多種實現方式。
local類讀取配置檔案,將配置檔案中的配置元素返回給程式模組。這種處理方式遇到的問題與採用strategy模式時非常類似。另外,採用local類只能處理相對簡單的邏輯,例如控制介面顯示等。
外掛程式是將**與配置分離的一種有效方式。與上面的local類相比,外掛程式的機制將配置粒度更加細化。
可以將外掛程式系統的配置按照功能分為兩大類:結構化配置、差異化配置。
結構化配置指定外掛程式與外掛程式之間的關係,外掛程式之間相互協作。差異化配置體現單個外掛程式的可配置能力。系統分為多個「**+外掛程式」的可執行模組。
在基於配置的軟體構建模型中,**和配置之間存在著乙個分水嶺。如何劃分**配置的界限影響到所有模組的詳細設計。
配置的目的是什麼,我們想要達到什麼效果?在分析這些問題之前,先說明一下使用配置檔案的兩個極端。
「配置必須配置的點」是配置檔案的最低限度。判斷是否達到了這個最低標準的方式非常簡單,就是觀察系統中是否存在因多版本特性而引起的多份**。
「配置能配置的所有點」是另外乙個極端,達到的最終效果就是完成了乙個配置語言執行的環境。
居於左側的模組復用度低,但配置檔案簡單,易於維護。居於右側的模組復用度高,配置檔案複雜。具體的專案需要在這兩個極端之間找到乙個平衡點。
一、怎樣找到**與配置之間的平衡點,最好的情況是由架構師定下乙個判斷原則,指導設計人員進行詳細設計。這對於維持產品的設計一致性非常關鍵。
二、在配置度高的情況下,不同的模組定義了特有的配置檔案規則。這些規則的統一對保證一致性也是乙個挑戰。
好的工具可以提高生產效率,降低重複性勞動的成本。
在基與多版本的**開發時,工具能做的是**生成工作。包括框架**以及簡單的控制**。更多的情況下仍然需要手工修改原始碼檔案。
關於**生成技術,在.net框架中提供了一系列的類來完成(system.codedom namespace等),可以參考相關資料。這種技術自己實現比較簡單的情況也並不複雜。
在基與配置的軟體構建策略中,工具的主要目標可以放在配置檔案的管理與生成上。**由開發人員編寫,工具生成配置檔案後經過測試就可以發布。
這裡**與配置的分界線會影響到工具的複雜度。需要協調**編寫、配置檔案管理、工具編寫這幾方面的成本與收益。
將動態語言技術加到系統中,**與配置的界限就變得模糊了。使用動態語言作為配置檔案的形式可以充分利用它的語言特性提高配置能力,省去了自己設計配置格式與解析配置的過程。
上面說模組自定義的配置規則多的情況下,將破壞系統設計的一致性。如果採用某種動態語言,那麼這種規則實際上就是這種語言的語法,有助於開發人員理解各個模組。但這時候的生成工具複雜度就增加了,本質上已經成為動態語言的**生成器。
多版本軟體構建策略分析
主要分析存在多個版本特性時的軟體構建策略。多個版本特性在有些情況下僅僅對應於軟體的本地化,複雜的情況就是不同版本中模組的業務邏輯 呈現策略都不相 同。這不僅在產品開發過程中增加成本,更多的成本將在維護階段體現出來。因此,選擇乙個合適的構建策略對降低開發與維護成本都是非常重要的。不同的版本採用不同的 ...
多版本軟體構建策略分析
主要分析存在多個版本特性時的軟體構建策略。多個版本特性在有些情況下僅僅對應於軟體的本地化,複雜的情況就是不同版本中模組的業務邏輯 呈現策略都不相 同。這不僅在產品開發過程中增加成本,更多的成本將在維護階段體現出來。因此,選擇乙個合適的構建策略對降低開發與維護成本都是非常重要的。不同的版本採用不同的 ...
多版本軟體構建策略分析
主要分析存在多個版本特性時的軟體構建策略。多個版本特性在有些情況下僅僅對應於軟體的本地化,複雜的情況就是不同版本中模組的業務邏輯 呈現策略都不相 同。這不僅在產品開發過程中增加成本,更多的成本將在維護階段體現出來。因此,選擇乙個合適的構建策略對降低開發與維護成本都是非常重要的。不同的版本採用不同的 ...