談談SimCloud的架構
評價或衡量一個軟體架構的好壞,首先要回歸到軟體的原始需求,軟體架構若滿足了當初的軟體需求,基本上是一個不壞的架構,若還能更進一步地應對未來需求的變化,則是一個好的架構。
一個軟體的需求和架構是一個很大的話題,限於篇幅,本文只對SimCloud軟體的需求分析與架構設計做一個簡單的概述。
需求分析
SimCloud最初的需求來源於SimCube中的Automation軟體可視化需求,主要對基於列的表數據繪製曲線類的圖表,後來為了滿足更多的需求,如讀取有限元計算結果數據進行可視化與後處理,導入有限元網格模型並集成求解器充當其的前後處理器等等。需求列表大概如下圖所示:
從下至上簡單分析各個需求,跨操作系統與國際化支持屬於非功能性需求。
易擴展和定製
易擴展和定製實際包含兩個方面的內容,舉個例子,SimCloud最早實現了對ANSYS有限元計算結果的解讀,那麼從軟體架構考慮對加入新的有限元軟體計算結果解讀的難易程度如何呢,如果容易加入,那麼就滿足了易擴展的需求。易擴展是通過軟體研發者來實現的,而易定製則既可以是軟體研發者,也可以是最終用戶實現,還舉個例子,基於有限元的計算結果使用某些規範對計算結果進行評定,這個需求非常廣泛,不可能交給軟體研發者一網打盡,因此軟體應提供一種機制便於定製出這些功能,具體實現者可以是最終用戶。
求解器集成
該需求是最初在16年8月啟動SimCloud開發時定義的,但直到17年9月才真正開始面對一個具體案例的輸入,最終通過該輸入產生了一款中高頻雜訊分析軟體ProNas。因此,通過集成不同求解器,SimCloud可孵化出更多的相互獨立的軟體,當然這必須通過軟體的可擴展性保證。
結構化與有限元類數據處理
這是SimCloud軟體的核心需求,提供對分門別類的各種數據的解讀功能,對不同的數據有不同的可視化手段,並可對數據進行分析以及後處理。
結構化數據可來自於文本文件,Excel文件等。有限元類數據主要是大型通用的有限元軟體的模型文件或者計算結果文件。在不安裝這些軟體的情況下,通過SimCloud也可解讀並對這些文件進行可視化與後處理,提供一個統一的,攜帶型的工具操作各種有限元文件。
架構設計
為了提供跨操作系統與國際化支持,軟體架構的基礎框架採用Qt框架,為了保證運行效率,使用C++編程語言開發。
為了滿足易擴展的需求,SimCloud採用插件架構,下圖是軟體中各個模塊的依賴關係圖,簡潔起見,與軟體中真實模塊相比此處有簡化。
上圖中綠色模塊都是插件,有三種類型的插件,CloudChart與CloudFeaGui兩個插件實現了二維圖表與三維圖形(包含有限元模型)的功能;CloudGeneralProject與CloudNoiseProject插件實現了項目介面,分別代表一般項目和雜訊分析項目,利用此種機制可單獨分發雜訊分析軟體,也可把雜訊軟體作為一個模塊納入SimCloud之中。當新建項目時,若存在多個項目插件,則會彈出如下項目列表供用戶選擇。未來集成更多的求解器時,這裡的項目插件也隨之擴充。
模塊依賴圖中的其它插件都是針對具體的待解讀文件類型定義的插件,如針對解讀ANSYS有限元計算結果的插件CloudAnsys,針對解讀ABAQUS有限元計算結果的插件CloudAbaqus。類似這樣插件的擴充將擴展SimCloud解讀各種文件類型的能力。
總結
在實現上,SimCloud軟體從最初只提供結構化數據的可視化以及大型通用有限元計算結果的後處理髮展為可集成特定求解器並提供前後處理器功能,所有這些功能實際上在前期需求分析時都有過一定的考慮,因此,當在SimCloud中集成雜訊分析求解器時,基本沒有遇到跨不過去的技術障礙,同時,藉助於ProNas的實現,夯實了底層框架的穩定性,也提高了SimCloud對於不同項目的管理能力。後續類似ProNas這樣的項目,將可以快速輕鬆複製,這就是好的軟體架構的特點。
TAG:SimCubeOnline |