論軟體系統架構風格

         (論軟體系統架構風格論文)2018年3月我公司承接了某網省電力公司的電力物資倉儲管理系統建設,系統主要功能有倉儲管理、主數據管理、業務查詢等。我在項目中擔任架構師一職,負責項目整體架構設計、架構文檔編寫、架構實現等工作。本文以該項目為例,主要論述了軟體架構風格在該項目的具體應用。本系統使用三層B/S的架構風格,降低系統耦合度,簡化了業務開發,使視圖可以更靈活的實現的同時簡化了系統部署方式。使用隱式調用的架構風格,提高軟體的可重用性,為構件的演化和維護提供方便,提升了系統的可擴展性和業務安全性,簡化了用戶操作。使用管道/過濾器架構風格,提高業務處理效率,簡化業務流程數據的處理,降低了系統測試複雜度。經過將近一年的建設,於2019年3月所有功能全部上線,系統運行平穩,得到用戶一致好評。

         隨著企業資訊化進程的加劇以及國家資訊化戰略的推進,越來越多的國有企業在逐步推進和完善企業資訊化應用。因此網省電力公司為響應國家號召委託我公司為其承建電力物資倉儲管理系統以下簡稱本系統。

  本系統於2018年3月開始,組建包括開發、設計、測試在內的38人的開發小組。我在項目中擔任架構師一職,負責項目整體架構設計、架構文檔編寫、架構實現等工作。本系統以主數據管理模組為基礎,包括物料主數據管理、倉庫主數據管理等功能;以倉儲管理模組為核心,包括收貨管理、發貨管理、倉儲作業管理、盤點管理等功能;以業務查詢和統計報表為提升點,包括業務查詢和報表查詢功能;基於以上功能分析搭建了由一台應用伺服器和一台資料庫伺服器構成的測試服務系統。同時隨著系統開發進程搭建了由三台應用伺服器和兩台資料庫伺服器構成的生產服務系統。在以上人力、伺服器資源的基礎上,本系統經過設計、開發、測試等將近一年的工作,於2019年3月順利上線,上線後所有功能的實現符合用戶的預期,並且運行平穩受到用戶的一致好評。

         在上述系統背景下我成功將系統架構風格運用到實際項目中並藉此保證了系統順利上線。系統架構風格是描述某一特定應用領域中系統組織方式的慣用模式。軟體架構風格反映了領域中眾多軟體系統所共有的結構和語義特性,並指導如何將各個模組和子系統有效的組織成一個完整的系統。目前大家公認的有五大類架構風格,分別為數據流風格,調用返迴風格,獨立構件風格,虛擬機風格,倉庫風格。其中數據流風格以數據處理為中心,典型的是批處理和管道/過濾器架構風格;調用返迴風格適合於業務層次清晰的應用,主要代表為主程式子程式、面向對象、層次化結構;獨立構件風格包括進程通訊和事件驅動架構風格;虛擬機風格的主要特點為支援各平台運行,主要用於解釋器和規則系統;倉庫風格代表子分類為資料庫系統,黑板系統。其優點為可更改性和可維護性,具備可重用的知識源,容錯性和健壯性較好,但是開發難度也較大。

  基於以上我對架構風格的理解以及風格特點的評估,本系統分別於系統集成處使用了隱式調用架構風格;於業務流轉處使用了管道\過濾器架構風格;於整體架構層面使用了三層B/S架構。下文將詳細介紹以上三種架構風格在本系統中具體實現方案。

  (一)系統集成處隱式調用架構風格的實現及效果

  由於隱式調用架構風格以事件驅動為主,構件不直接調用一個過程而是觸發或廣播一個或多個事件,同時系統中其他構件的過程在一個或多個事件中註冊。所以在實際架構設計中我將本系統與ERP系統集成處將每種數據交互進行構件封裝,將每個數據交互封裝成一個小的構件,一個構件僅處理一種數據交互。在最小化業務構件的基礎上將多個數據交互構件進行組合由此形成一個個大的業務構件。在業務構件的基礎上將業務構件組合封裝成事務碼,當一個事務碼被觸發時,事務碼調用對應業務構件,業務構件自動執行在業務構件中封裝好的一個或多個數據交互構件。通過此類架構風格開發人員只用關注最小化的數據交互封裝以及構件組合,而在數據交互構件完成後業務數據就能自動按照封裝好的業務構件進行數據流轉交互,大大降低了開發的工作量,同時降低了系統的耦合度,提升了系統的擴展性,為軟體重用提供強大的支援,為構件的維護和演化帶來了方便。

  (二)業務流轉處管道\過濾器架構風格的實現及效果

  管道/過濾器架構風格中每個構件都有一組輸入和輸出,構件讀輸入的數據流,經過內部處理,然後產生輸出數據流,經過處理,產生輸出數據流。本系統中物資從採購、配送、交接、驗收、入庫、調撥、領料、出庫以及後續盤點業務的數據流轉都有明顯的數據處理流程且數據處理規律及關係明顯。因此在架構設計中我們將不同類型的物資業務數據封裝成一個個構件,每個構件都根據業務固化一組輸入和輸出,將構件中數據處理封裝為一個個數據處理的子構件,將一個構件加一個數據處理構件進行組合形成一個獨立業務處理管道\過濾器組合。將多個管道\過濾器的組合連接起來構成整個業務數據流轉體系,再將數據集成處事務碼引用到每一段業務處理組合中形成整體的基於事務碼加管道\過濾器的整體數據流轉機制。在此機制的基礎上開發人員只需關注組合構件中輸入數據、輸出數據、事務碼。大大簡化了開發的流程,同時也簡化了系統的測試任務,使所有業務流程變更做到一次開發永久使用,大大提高了系統的穩定性和可重用性。

  (三)整體架構上採用了三層B/S架構風格的實現

  三層B/S架構風格中將系統整體分為三層進行系統開發及部署,三層分別為展現層、業務層、持久層。這樣進行拆分後使系統耦合度大大降低,由於展現層和持久層分離,使系統可以在持久層不變的情況下支撐更複雜的視圖展現效果;由於業務層和持久層分離,是系統可以靈活的擴展新業務而無需改變資料庫模型;同時本系統持久層在實際開發中使用了工廠設計模式將資料庫連接和數據訪問進行隔離,提高了系統對異構數據的支撐,另外基於瀏覽器進行系統訪問的模式,符合用戶日常使用習慣,減少了培訓成本。依託客戶端瀏覽器進行產品呈現,簡化了推廣難度,三層架構使業務的實現更加清晰,程式碼的耦合度更低,擴展性更好。

         基於以上三種軟體架構風格在系統中使用,經過團隊人員將近一年的努力,本系統於2019年3月順利上線。本系統提升了各電力物資倉庫的物資流轉效率,切實減輕了倉庫業務人員的工作壓力,更好的支撐了業務的回溯及倉庫業務開展,獲得了物資公司的嘉獎。通過本項目的研發我對軟體架構風格的理解更加深入,為後續的發展打下了更堅實的技術基礎。

  本項目在實際的研發過程中使用了數據流中管道/過濾器、獨立構件中隱式調用的架構風格,在管道/過濾器風格中數據過濾中間件的抽象及定義遇到了各業務規則不一致,數據封裝效果不一致的難題,由於倉儲作業中收貨、發貨、轉儲等不同業務的業務規則不一致,但是數據一致性高,偏差較小,在實際構件的封裝中開發人員需要針對每種業務進行單獨編寫,工作量大且重複度高。經過協商用適配器的設計模式為各種不同的業務規則編寫了通用的數據封裝介面,使得最終業務規則和數據封裝可以進行靈活轉換和適配,解決了數據處理規則不一致的問題。系統通過以上兩種架構風格的引入,簡化了系統開發模式,提高了開發效率,同時系統的可擴展性,可維護性引都有所提升。