一個工程實踐項目的完整軟件系統設計方案


1 前言

  本文主要是針對一個留學生信息管理與分析系統的分析與總結,主要闡述項目的完整設計方案和一些軟件結構特點,並采用不同的視圖來描述項目的軟件系統概念原型。

  工程實踐項目介紹:工程實踐是一個關於留學生信息管理與分析的平台。該系統是為用戶提供有關留學服務信息的雙邊平台,管理人員定期維護系統,學生可以通過該系統搜索學校相關信息,並根據所提供的自身信息獲得相應的留學建議。留學信息管理與分析系統可以針對不同用戶,通過多種因素的綜合分析,給出科學的建議,給用戶合適的擇校建議,讓用戶更好的選擇心儀的海外高校。主要是為海外留學的人提供一些指導和推薦作用。

2 軟件設計方案總述

  一個良好的軟件必然是經過好的軟件設計,並不斷重構、迭代的,以具有好的性能和可用性。那么,怎樣才是一個好的軟件設計呢?

  軟件設計從大的方面來說,有軟件架構風格與策略的不同,從具體實現方面來說,有設計模式的不同,從底層來說,數據的存取以及語言的實現也不一樣。只有采取最適合項目的軟件設計方案,綜合性能、成本、開發效益、可用性,才能獲得最好的軟件設計效果。

  軟件架構風格有很多,如分層架構、典型的MVC架構和MVVM架構、管道-過濾器、客戶端-服務、P2P(如區域鏈)、發布訂閱風格、CRUD、層次化架構等;典型的設計模式有工廠模式、單例模式、裝飾模式、代理模式、外觀模式、享元模式等;典型的軟件架構的描述方法視圖,比如分解視圖、依賴視圖、泛化視圖、執行視圖、實現視圖、部署視圖等。

  這些軟件架構風格和設計模式並沒有優劣之分,只有適不適合之說。因此,我們要采取最適合本項目的架構風格和設計模式,以達到收益的最大化。

3 軟件架構風格

  本項目是一個多用戶的系統,分為普通用戶和超級管理員,為了軟件設計的合理性、主流性、易用性、維護性考慮,此項目采取B/S架構,即browser/server架構,此架構最適合此項目的開發。

  B/S(Browser/Server)架構,即瀏覽器/服務器架構,是在C/S(Client/Service,客戶機/服務器)模式的基礎上發展起來的一種體系結構,在開發Web應用時有明顯的技術優勢。因為在C/S模式下,用戶使用應用時需要下載並安裝客戶端程序,其中同時包含了業務邏輯的實現和界面顯示,由服務器端提供對數據訪問的處理功能。而在B/S模式下,應用程序的業務邏輯實現和數據處理全部由服務器端提供,用戶只需依靠瀏覽器作為界面顯示便可使用,非常輕量快捷。

 

 

設計模式

  采用設計模式的目的就是為了軟件的重用,因此采用關注點分離的思想,區分軟件中變化的部分和不變的部分,在不變的部分使用設計模式,以提高軟件的重用性和可維護性。

  此項目采用面向對象的思想,因此不可避免的采用多態的技術,因此也不可避免的采用模板方法模式和策略模式。為了安全的考慮,我們在權限控制模塊采取代理模式,進行用戶審計,防止用戶進行越權訪問;采用外觀模式,進一步簡化瀏覽器的業務邏輯;采用適配器模式,來適應普通用戶和管理者接口的不適配。

5 視圖及目錄結構

  5.1 分解視圖

  分解是構建軟件架構模型的關鍵步驟,分解視圖也是描述軟件架構模型的關鍵視圖,一般分解視圖呈現為較為明晰的分解結構(breakdown structure)特點。分解視圖用軟件模塊勾畫出系統結構,往往會通過不同抽象層級的軟件模塊形成層次化的結構。組件主要有類、軟件模塊、軟件單元、子系統等。

  根據對留學生信息管理系統的分析,此系統可以分解成五大功能模塊,畫出分解視圖如下:

  

  5.2 依賴視圖

  依賴視圖展現了軟件模塊之間的依賴關系。比如一個軟件模塊A調用了另一個軟件模塊B,那么我們說軟件模塊A直接依賴軟件模塊B。如果一個軟件模塊依賴另一個軟件模塊產生的數據,那么這兩個軟件模塊也具有一定的依賴關系。依賴視圖在項目計划中有比較典型的應用。比如它能幫助我們找到沒有依賴關系的軟件模塊或子系統,以便獨立開發和測試,同時進一步根據依賴關系確定開發和測試軟件模塊的先后次序。依賴視圖在項目的變更和維護中也很有價值,比如它能有效幫助我們理清一個軟件模塊的變更對其他軟件模塊帶來影響范圍。

  依賴是一種使用的關系,即一個類的實現需要另一個類的協助,所以要盡量不使用雙向的互相依賴。在代碼上主要表現為局部變量、方法的參數或者對靜態方法的調用。

  根據分解視圖的五大模塊,我們可以把握其中模塊之間的關系,通過UML類圖,我們可以畫出相應的依賴視圖:

  5.3 泛化視圖

  首先我們要明確一點就是,泛化不同於繼承,應該大於繼承。不要一提起泛化就想到繼承,這是不准確的。繼承關系只是面向對象分析和設計方法中類之間的典型例子。值得注意的是,采用對象組合替代繼承關系,並不會改變類之間的泛化特征,因此泛化是指軟件模塊之間的一般化或具體化的關系,不能局限於繼承概念的 應用。

  泛化視圖展現了軟件模塊之間的一般化或具體化的關系,有助於描述軟件的抽象層次,從而便於軟件的擴展和維護。比如通過對象組合或繼承很容易形成新的軟件模塊與原有的軟件架構兼容。

  基於以上理解,我們可以簡單重構一下,同樣通過UML類圖,畫出此項目的泛化視圖:

  5.4 執行視圖

  執行視圖展示了系統運行時的時序結構特點,比如流程圖、時序圖等。執行視圖中的每一個執行實體,一般稱為組件,都是不同於其他組件的執行實體。如果有相同或相似的執行實體那么就把他們合並成一個。

  執行實體可以最終分解到軟件的基本元素和軟件的基本結構,因而與軟件代碼具有比較直接的映射關系。在設計與實現過程中,我們一般將執行視圖轉換為偽代碼之后,再進一步轉換為實現代碼。

  因此,執行視圖其實表現的是系統中間比較動態的那一部分。鑒於此,我們可以通過UML的流程圖來表示此項目的執行視圖:

  

  5.5 實現視圖

  實現視圖是描述軟件架構和源文件之間的映射關系。比如軟件架構的靜態結構以包圖或設計類圖的方式來描述,但是這些包和類都是在哪些目錄的哪些源文件中具體實現的呢?一般我們通過目錄和源文件的命名來對應軟件架構中的包、類等靜態結構單元,這樣典型的實現視圖可以由軟件項目的源文件目錄樹來呈現。實現視圖有助於碼農在海量源代碼文件中找到具體的某個軟件單元的實現。實現視圖與軟件架構的靜態結構之間映射關系越是對應的一致性高,越是有利於軟件的維護,因此實現視圖是一種非常關鍵的架構視圖。

  根據此項目的開發,我們可以給出源代碼的目錄文件結構,即此項目的實現視圖:

 

 

 

 

 

 

   5.6 部署視圖

  部署視圖是將執行實體和計算機資源建立映射關系。這里的執行實體的粒度要與所部署的計算機資源相匹配,比如以進程作為執行實體,那么對應的計算機資源就是主機,這時應該描述進程對應主機所組成的網絡拓撲結構,這樣可以清晰地呈現進程間的網絡通信和部署環境的網絡結構特點。當然也可以用細粒度的執行實體對應處理器、存儲器等。部署視圖有助於設計人員分析一個設計的質量屬性,比如軟件處理網絡高並發的能力、軟件對處理器的計算需求等。

  對應於此項目,我們可以采取UML的部署圖來描述其部署視圖:

  

  5.7 工作分配視圖

  工作分配視圖將系統分解成可獨立完成的工作任務,以便分配給各項目團隊和成員。工作分配視圖有利於跟蹤不同項目團隊和成員的工作任務的進度,也有利於在項目團隊和成員之間合理地分配和調整項目資源,甚至在項目計划階段,工作分配視圖對於進度規划、項目評估和經費預算都能起到有益的作用。

  在這里,我們給出此項目的大致工作分配視圖:

  

 

6 數據庫設計

  數據庫采用當下流行的MySQL數據庫,使用Redis進行數據緩存,提高可用性。

  根據之前對項目進行的數據建模和分析,大致的可以得出此系統的五個類,對應五張表,我們可以新建一個analysis數據庫,在數據庫里新建五張表,這里把相應的表結構的設計列出來:

A)用戶信息表

  用戶信息表存放所有用戶的賬號和密碼等重要信息,用於用戶的注冊和登錄。其他信息則與論壇或其他個人信息關聯,包括性別、頭像、成績、意向學校或收藏等,可為空,后續進行詳細設計。使用攔截器,未登錄不能訪問論壇與院校詳情。

Id

賬號

密碼

昵稱

注冊時間

其他……

 

 

 

 

 

 

 

B)管理員信息表

  后台管理人員的信息。

Id

賬號

密碼

登錄時間

登錄ip

 

 

 

 

 

 

C)學校信息表

  學校信息表主要記錄學校的一些關鍵信息如名稱、專業設置等。其他例如錄取率、申請材料等在其他信息中進行詳細設計。

Id

中英校名

國家地區

QS排名

學校介紹

專業設置

其他……

 

 

 

 

 

 

 

 

D)專業信息表

  專業信息表包括全球主流專業的詳細信息。后續進行詳細設計以增強信息檢索能力。

Id

名稱

學校排名

詳細信息……

 

 

 

 

 

E)文章信息表

  論壇的首要的功能是實現文章的發布與留言,文章信息表中的熱度包括瀏覽量、點贊數和轉發數,留言列表將采用單獨的表進行映射。

Id

作者

發布時間

熱度

關鍵詞

文章內容

留言列表

 

 

 

 

 

 

 

 

F)中間結果表

  主要是起到緩存的作用,引入中間關聯表。

Id

學校ID

專業ID

詳細信息……

 

 

 

 

 

 

  數據結構方面的設計我們采取Redis緩存和rabbitHQ隊列,具體的數據結構已經通過springboot技術進行封裝,我們這里不再敘述。

7 軟件系統運行環境和技術選型

  本項目采用JavaWeb應用開發技術,基於Vue+Spring Boot實現一個留學信息管理與分析系統,旨在為用戶提供完善的信息檢索功能和建議與分析的推薦功能。前端部分采用HTML、CSS、JavaScript等技術實現用戶界面的開發,並采用Vue+Vue-resource+Vue-cookie。后台服務器端基於Java語言進行開發,核心部分采用SpringBoot技術棧,ORM則選擇myBatis框架。數據庫管理方面使用輕量級MySQL數據庫和Redis緩存技術,最終采用ECS雲服務器實現系統的發布。使用RESTFul進行接口設計、使用前后端分離開發。后續則實現信息挖掘和可視化,以實現更強大的分析功能,可能使用Scrapy框架等。

  前端開發平台:Visual Studio Code

       后台開發平台:Intellij IDEA

       數據庫:MySQL & Redis

       服務器:雲服務器(ECS)

8 概念模型的核心工作機制 

  概念是人對能代表某種事物或發展過程的特點及意義所形成的思維結論,概念原型是一種虛擬化的、理想化的軟件產品形式。也就是說,概念原型 = 用例 + 數據模型。

  軟件架構代表了軟件系統的整體設計結構,它應該是所有這些視圖的集合。但我們不會將不同角度的這些視圖整合起來,因為不便於閱讀和更新。不過我們會有意識地將不同角度的視圖之間的映射關系和重疊部分了然於胸,從而深刻理解軟件架構內在的一致性和完整性,這就是系統概念原型。

  因此基於以上分析和建模,我們就可以總結出此項目的概念原型,同時對此概念模型的工作過程進行分析。

 

  整個概念模型的工作過程為:

  用戶這個用例向系統輸入條件和數據,系統進行分析和篩選為專業、學校和文章幾種信息,系統獲取到用戶的信息,進行算法的分析和提取,並根據每一個獨立的用戶進行個性化推薦,把最適合用戶的學校和專業推薦給用戶。用戶如果對結果不滿意,還可以查看學校和專業的論壇,通過查看別人的帖子進行篩選,重新進行信息檢索,直到獲取到滿意的結果。這就是一次普通用戶的業務過程。比如我是張三,我今年軟件工程專業畢業,我想去美國留學,我輸入自己的論文、科研成果以及GPA,系統會自動推薦適合我的學校,比如哈佛大學,但是我可能並不太想去哈佛,於是去搜一下對應的論壇,發現麻省理工更適合我,於是把簡歷發給了麻省理工,留學分析這個過程完畢。
  管理員登錄之后,進入屬於自己的界面,管理員進行增刪改查等操作之后,系統進行處理這些數據,進行更新學校、專業、文章等表結構,並把操作之后的結果返回給管理員,完成了一次業務過程。比如管理員登錄系統之后,可以進行學校信息的更新,專業的更新,對不符合的論壇或者用戶進行刪除操作等。如果某個專業或者學校大家都說好,那么我可以設置一下推薦權級,讓用戶搜索的時候,優先看到此學校或者專業,節省用戶的時間。管理員界面主要是個后台監管界面,可以對系統進行一定的干預,以獲得更好的用戶體驗。

9 總結

  本篇博客主要給出了留學分析與管理系統的完整設計方案,給出了其蘊涵的軟件結構特點和概念原型(各種視圖),並提供了運行環境和技術選型,最后結合實例給出了該系統概念原型的核心工作機制。希望在進行軟件設計階段予以讀者一定的啟發作用,更好的運用軟件工程的原理進行軟件開發。

10 參考資料

  1 Software Engineering:Theory and Practice(Fourth Edition),ShariLawrence Pfleeger,Joanne M.Atlee

  2 https://www.cnblogs.com/chy666/p/14049077.html

  3 https://www.cnblogs.com/jiangds/p/6596595.html

  4 https://refactoringguru.cn/design-patterns/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM