(論軟體系統架構風格論文)2018年3月我公司承接了某網省電力公司的電力物資倉儲管理系統建設,系統主要功能有倉儲管理、主資料管理、業務查詢等。我在專案中擔任架構師一職,負責專案整體架構設計、架構文件編寫、架構實現等工作。本文以該專案為例,主要論述了軟體架構風格在該專案的具體應用。本系統使用三層B/S的架構風格,降低系統耦合度,簡化了業務開發,使檢視可以更靈活的實現的同時簡化了系統部署方式。使用隱式呼叫的架構風格,提高軟體的可重用性,為構件的演化和維護提供方便,提升了系統的可擴充套件性和業務安全性,簡化了使用者操作。使用管道/過濾器架構風格,提高業務處理效率,簡化業務流程資料的處理,降低了系統測試複雜度。經過將近一年的建設,於2019年3月所有功能全部上線,系統執行平穩,得到使用者一致好評。
隨著企業資訊化程式的加劇以及國家資訊化戰略的推進,越來越多的國有企業在逐步推進和完善企業資訊化應用。因此網省電力公司為響應國家號召委託我公司為其承建電力物資倉儲管理系統以下簡稱本系統。
本系統於2018年3月開始,組建包括開發、設計、測試在內的38人的開發小組。我在專案中擔任架構師一職,負責專案整體架構設計、架構文件編寫、架構實現等工作。本系統以主資料管理模組為基礎,包括物料主資料管理、倉庫主資料管理等功能;以倉儲管理模組為核心,包括收貨管理、發貨管理、倉儲作業管理、盤點管理等功能;以業務查詢和統計報表為提升點,包括業務查詢和報表查詢功能;基於以上功能分析搭建了由一臺應用伺服器和一臺資料庫伺服器構成的測試服務系統。同時隨著系統開發程式搭建了由三臺應用伺服器和兩臺資料庫伺服器構成的生產服務系統。在以上人力、伺服器資源的基礎上,本系統經過設計、開發、測試等將近一年的工作,於2019年3月順利上線,上線後所有功能的實現符合使用者的預期,並且執行平穩受到使用者的一致好評。
在上述系統背景下我成功將系統架構風格運用到實際專案中並藉此保證了系統順利上線。系統架構風格是描述某一特定應用領域中系統組織方式的慣用模式。軟體架構風格反映了領域中眾多軟體系統所共有的結構和語義特性,並指導如何將各個模組和子系統有效的組織成一個完整的系統。目前大家公認的有五大類架構風格,分別為資料流風格,呼叫返回風格,獨立構件風格,虛擬機器風格,倉庫風格。其中資料流風格以資料處理為中心,典型的是批處理和管道/過濾器架構風格;呼叫返回風格適合於業務層次清晰的應用,主要代表為主程式子程式、物件導向、層次化結構;獨立構件風格包括程式通訊和事件驅動架構風格;虛擬機器風格的主要特點為支援各平臺執行,主要用於直譯器和規則系統;倉庫風格代表子分類為資料庫系統,黑板系統。其優點為可更改性和可維護性,具備可重用的知識源,容錯性和健壯性較好,但是開發難度也較大。
基於以上我對架構風格的理解以及風格特點的評估,本系統分別於系統整合處使用了隱式呼叫架構風格;於業務流轉處使用了管道\過濾器架構風格;於整體架構層面使用了三層B/S架構。下文將詳細介紹以上三種架構風格在本系統中具體實現方案。
(一)系統整合處隱式呼叫架構風格的實現及效果
由於隱式呼叫架構風格以事件驅動為主,構件不直接呼叫一個過程而是觸發或廣播一個或多個事件,同時系統中其他構件的過程在一個或多個事件中註冊。所以在實際架構設計中我將本系統與ERP系統整合處將每種資料互動進行構件封裝,將每個資料互動封裝成一個小的構件,一個構件僅處理一種資料互動。在最小化業務構件的基礎上將多個資料互動構件進行組合由此形成一個個大的業務構件。在業務構件的基礎上將業務構件組合封裝成事務碼,當一個事務碼被觸發時,事務碼呼叫對應業務構件,業務構件自動執行在業務構件中封裝好的一個或多個資料互動構件。通過此類架構風格開發人員只用關注最小化的資料互動封裝以及構件組合,而在資料互動構件完成後業務資料就能自動按照封裝好的業務構件進行資料流轉互動,大大降低了開發的工作量,同時降低了系統的耦合度,提升了系統的擴充套件性,為軟體重用提供強大的支援,為構件的維護和演化帶來了方便。
(二)業務流轉處管道\過濾器架構風格的實現及效果
管道/過濾器架構風格中每個構件都有一組輸入和輸出,構件讀輸入的資料流,經過內部處理,然後產生輸出資料流,經過處理,產生輸出資料流。本系統中物資從採購、配送、交接、驗收、入庫、調撥、領料、出庫以及後續盤點業務的資料流轉都有明顯的資料處理流程且資料處理規律及關係明顯。因此在架構設計中我們將不同型別的物資業務資料封裝成一個個構件,每個構件都根據業務固化一組輸入和輸出,將構件中資料處理封裝為一個個資料處理的子構件,將一個構件加一個資料處理構件進行組合形成一個獨立業務處理管道\過濾器組合。將多個管道\過濾器的組合連線起來構成整個業務資料流轉體系,再將資料整合處事務碼引用到每一段業務處理組合中形成整體的基於事務碼加管道\過濾器的整體資料流轉機制。在此機制的基礎上開發人員只需關注組合構件中輸入資料、輸出資料、事務碼。大大簡化了開發的流程,同時也簡化了系統的測試任務,使所有業務流程變更做到一次開發永久使用,大大提高了系統的穩定性和可重用性。
(三)整體架構上採用了三層B/S架構風格的實現
三層B/S架構風格中將系統整體分為三層進行系統開發及部署,三層分別為展現層、業務層、持久層。這樣進行拆分後使系統耦合度大大降低,由於展現層和持久層分離,使系統可以在持久層不變的情況下支撐更復雜的檢視展現效果;由於業務層和持久層分離,是系統可以靈活的擴充套件新業務而無需改變資料庫模型;同時本系統持久層在實際開發中使用了工廠設計模式將資料庫連線和資料訪問進行隔離,提高了系統對異構資料的支撐,另外基於瀏覽器進行系統訪問的模式,符合使用者日常使用習慣,減少了培訓成本。依託客戶端瀏覽器進行產品呈現,簡化了推廣難度,三層架構使業務的實現更加清晰,程式碼的耦合度更低,擴充套件性更好。
基於以上三種軟體架構風格在系統中使用,經過團隊人員將近一年的努力,本系統於2019年3月順利上線。本系統提升了各電力物資倉庫的物資流轉效率,切實減輕了倉庫業務人員的工作壓力,更好的支撐了業務的回溯及倉庫業務開展,獲得了物資公司的嘉獎。通過本專案的研發我對軟體架構風格的理解更加深入,為後續的發展打下了更堅實的技術基礎。
本專案在實際的研發過程中使用了資料流中管道/過濾器、獨立構件中隱式呼叫的架構風格,在管道/過濾器風格中資料過濾中介軟體的抽象及定義遇到了各業務規則不一致,資料封裝效果不一致的難題,由於倉儲作業中收貨、發貨、轉儲等不同業務的業務規則不一致,但是資料一致性高,偏差較小,在實際構件的封裝中開發人員需要針對每種業務進行單獨編寫,工作量大且重複度高。經過協商用介面卡的設計模式為各種不同的業務規則編寫了通用的資料封裝介面,使得最終業務規則和資料封裝可以進行靈活轉換和適配,解決了資料處理規則不一致的問題。系統通過以上兩種架構風格的引入,簡化了系統開發模式,提高了開發效率,同時系統的可擴充套件性,可維護性引都有所提升。