本文基於我們的工程實踐項目--設計一個類似知乎問答系統。該問答系統支持提問、回答等基本操作;發布后能夠修改和刪除回答;回答支持按熱度和時間線排序;能夠對回答點贊和反對;能夠對問答發表評論;展現當前熱門問題列表等功能。
二、項目架構
本項目采用B/S模式架構風格,B/S模式的架構風格是指游覽器通過請求和應答的方式訪問或者調用服務代碼。這里的請求和應答可以是函數調用和返回值,也可以是TCP Socket中的send和recv,還可以是HTTP協議中的GET請求和響應。
分層設計是一種最為常見的架構設計方案,能有效地使系統結構清晰、設計簡化。MVC模式是當今最為流行的多層設計模式。該模式把一個應用的輸入、處理、輸出流程進行分離並抽象為控制器(Controller)、模型(Model)、視圖(View)三個模塊,實現了業務邏輯層、數據庫訪問層和用戶界面層之間在彼此分離的同時仍保持松散的耦合關系,增加了靈活性和可擴展性。
MVC中M、V和C所代表的含義如下:
-
Model(模型)代表一個存取數據的對象及其數據模型。
-
View(視圖)代表模型包含的數據的表達方式,一般表達為可視化的界面接口。
-
Controller(控制器)作用於模型和視圖上,控制數據流向模型對象,並在數據變化時更新視圖。控制器可以使視圖與模型分離開解耦合。
基於MVC模式的特點,本項目采用MVC架構進行軟件開發,采用MVC架構可以使得項目前后端分離,前端只需要進行數據展示,而業務邏輯處理則由后端負責,這樣減少了項目實現的復雜度。
三、接口API
API是指應用程序編程接口,我們通過API接口可以實現特定的功能,而不需要了解其內部實現細節。可以把API接口理解為是特定服務的一種封裝,將服務封裝起來提供給他人調用,這樣一來很多功能不需要從新開發。
接口名稱 | 接口地址 | 請求方式 | 請求參數 | 響應信息 |
---|---|---|---|---|
注冊 | /register | POST | 用戶名、郵箱、密碼 | 注冊成功/失敗的信息 |
登錄 | /login | POST | 郵箱、密碼 | 登陸成功/失敗的信息 |
個人信息 | /profile/{userId} | GET | 用戶ID | 用戶信息 |
提問 | /ask | POST | 問題 | 問題ID |
查看問題 | /question/{questionId} | GET | 問題ID | 問題相關信息 |
回答 | /answer | POST | 回答 | 回答ID |
回答獲贊數 | /likeAnswer | GET | 回答ID | 回答獲贊數 |
添加至收藏夾 | /addCollection | POST | 收藏夾 | 添加成功/添加失敗 |
收藏夾內容 | /collection/{collectionId} | GET | 收藏夾ID | 收藏夾內容 |
四、軟件系統概念原型視圖
4.1 分解視圖
分解視圖也是描述軟件架構模型的關鍵視圖,一般分解視圖呈現為較為明晰的分解結構特點。分解視圖用軟件模塊勾划出系統結構,往往會通過不同抽象層級的軟件模塊形成層次化的結構。
4.2 依賴視圖
依賴視圖展現了軟件模塊之間的依賴關系。比如一個軟件模塊A調用了另一個軟件模塊B,那么我們說軟件模塊A直接依賴軟件模塊B。如果一個軟件模塊依賴另一個軟件模塊產生的數據,那么這兩個軟件模塊也具有一定的依賴關系。
4.3 泛化視圖
泛化視圖展現了軟件模塊之間的一般化或具體化的關系,典型的例子就是面向對象分析和設計方法中類之間的繼承關系。泛化視圖有助於描述軟件的抽象層次,從而便於軟件的擴展和維護。比如通過對象組合或繼承很容易形成新的軟件模塊與原有的軟件架構兼容。
4.4 執行視圖
執行視圖展示了系統運行時的時序結構特點,比如流程圖、時序圖等。執行視圖中的每一個執行實體,一般稱為組件(Component),都是不同於其他組件的執行實體。如果有相同或相似的執行實體那么就把它們合並成一個。
4.5 部署視圖
部署視圖是將執行實體和計算機資源建立映射關系。這里的執行實體的粒度要與所部署的計算機資源相匹配,比如以進程作為執行實體那么對應的計算機資源就是主機,這時應該描述進程對應主機所組成的網絡拓撲結構,這樣可以清晰地呈現進程間的網絡通信和部署環境的網絡結構特點。
五、數據庫設計
用戶表
字段 | 類型 | 說明 |
---|---|---|
user_id | int(11) | 用戶id |
varchar(50) | 郵箱 | |
password | varchar(50) | 密碼 |
username | varchar(50) | 用戶名 |
gender | int(11) | 性別 |
simple_desc | varchar(50) | 一句話介紹 |
position | varchar(100) | 居住地 |
industry | varchar(100) | 所在行業 |
career | varchar(100) | 職業經歷 |
education | varchar(100) | 教育經歷 |
問題評論表
字段 | 說明 |
---|---|
comment_id | 評論id |
commentContent | 評論內容 |
at_user_id | 回復誰 |
liked_count | 被點贊次數 |
create_time | 評論時間 |
answer_id | 評論在哪個問題下 |
user_id | 評論用戶 |
回答表
字段 | 說明 |
---|---|
answer_id | 評論id |
content | 回答內容 |
liked_count | 點贊數 |
create_time | 回答時間 |
question_id | 回答的問題id |
user_id | 回答用戶id |
收藏夾表
字段 | 說明 |
---|---|
collection_id | 收藏夾id |
collection_name | 收藏夾名稱 |
create_time | 創建時間 |
update_time | 更新時間 |
user_id | 收藏夾用戶id |
六、軟件系統運行環境和技術選型
開發語言:JAVA
Web框架:SpringBoot
緩存:Redis
數據庫:MySQL
七、系統概念原型的核心工作機制
-
概念是人對能代表某種事物或發展過程的特點及意義所形成的思維結論。
-
概念原型是一種虛擬的、理想化的軟件產品形式。
-
概念原型 = 用例 + 數據模型
概念原型的工作流程:
用戶在登陸頁面登錄系統后,可以進行提問,也可以對問題進行評論和回答。
回答頁面可以對回答內容進行編輯,編輯完后將回答進行發表,發表后也可以刪除已發表的內容。