1. 項目背景介紹
本項目是實現一個基於nodejs的express框架開發的一個抽獎系統。該抽獎系統通過管理員設置抽獎信息、創建抽獎項目並發布,用戶只需使用微信掃碼即可參與抽獎。
2. 軟件設計方案
2.1 系統架構
軟件架構風格是描述某一特定應用領域中系統組織方式的慣用模式,常用的軟件架構風格有如下幾類:三層架構、MVC、MVVM、管道-過濾器、客戶-服務器、P2P、發布-訂閱、CRUD、層次化等。本項目整體架構使用了MVC架構
本項目采用了BS即Browser/Server(瀏覽器/服務器)結構,就是只安裝維護一個服務器(Server),而客戶端選用瀏覽器(Browse)運行軟件。B/S結構應用程序相對於傳統的C/S結構應用程序就是一個特別大的進步。 B/S結構的重要特征就是分布性強、維護方便、開發簡單並且共享性強、總體擁有費用低。
2.2 接口api
API 定義了客戶端與服務端數據交互的基本格式,包括客戶端以什么樣的格式請求,請求參數,服務端以什么樣的格式響應,正確響應與錯誤響應的不同內容等。
接口名稱 | 接口地址 | 請求方式 | 請求參數 | 響應信息 |
---|---|---|---|---|
管理員登錄 | /login | post | 賬號和密碼 | 保存登錄狀態,基本信息 |
管理員注冊 | /register | post | 賬號密碼等基本信息 | 基本信息 |
查看獎品信息 | /prizes | get | 無 | 所有的獎品信息 |
添加獎品 | /prize/create | post | 獎品信息 | 所有的獎品信息 |
獎品詳情 | /prize/:id | get | 獎品id | 獎品信息 |
刪除獎品 | /prize/:id/delete | post | 獎品id | 刪除成功 |
查看所有抽獎項目 | /projects | get | 無 | 所有抽獎項目信息 |
創建抽獎項目 | /project/create | post | 抽獎項目信息 | 抽獎項目詳細信息 |
抽獎項目更新 | /project/:id/update | post | 抽獎項目信息 | 抽獎項目詳細信息 |
抽獎項目刪除 | /project/:id/delete | post | 抽獎項目id | 刪除成功 |
獲取項目二維碼 | /project/:id/qrcode | get | 項目id | 項目url對應的二維碼 |
抽獎項目 | /project/:id | get | 項目id | 項目基本信息 |
參與抽獎 | /project/:id/attend | post | 用戶微信openid | 中獎獎品和抽獎次數 |
3. 軟件架構的不同視圖
軟件架構模型是通過一組關鍵視圖來描述的,同一個軟件架構,由於選取的視角(Perspective)和抽象層次不同可以得到不同的視圖,這樣一組關鍵視圖搭配起來可以完整地描述一個邏輯自洽的軟件架構模型。一般來說,我們常用的幾種視圖有分解視圖、依賴視圖、泛化視圖、執行視圖、實現視圖、部署視圖和工作任務分配視圖。
3.1 分解視圖
分解是構建軟件架構模型的關鍵步驟,分解視圖也是描述軟件架構模型的關鍵視圖,一般分解視圖呈現為較為明晰的分解結構(breakdown structure)特點。分解視圖用軟件模塊勾划出系統結構,往往會通過不同抽象層級的軟件模塊形成層次化的結構。
3.2 依賴視圖
依賴視圖展現了軟件模塊之間的依賴關系。本系統采用MVC框架,下圖展現了軟件模塊之間的依賴關系與MVC模型的邏輯流。
3.3 執行視圖
普通用戶:掃碼參與抽獎。
管理員:主要為獎品和抽獎項目的管理。
3.4 實現視圖
軟件項目的源文件目錄樹。
3.5 部署圖
采用單點部署,各組件運行於一台服務器上,視圖如下
3.6 分配視圖
工作分配視圖將系統分解成可獨立完成的工作任務,以便分配給各項目團隊和成員。工作分配視圖有利於跟蹤不同項目團隊和成員的工作任務的進度,也有利於在個項目團隊和成員之間合理地分配和調整項目資源,甚至在項目計划階段工作分配視圖對於進度規划、項目評估和經費預算都能起到有益的作用。
4. 主要數據結構(數據庫設計)
獎品:
const PrizeSchema = new Schema({
name: {type: String, required: true, max: 100},
pictureUrl: {type: String, required: true}
});
抽獎項目:
const ProjectSchema = new Schema({
name: { type: String, required: true, max: 100 },
times: { type: Number, min: 1, max: 10, required: true },
startTime: { type: Date, required: true },
finishTime: { type: Date, required: true },
prizeList: { type: [{ type: Schema.Types.ObjectId, ref: 'Prize' }], required: true },
numList:[{type:Number}]
});
用戶:
const UserSchema = new Schema({
userID: { type: String, required: true, max: 100 },
winPrize: [{ type: String }],
attendProject: [{
project: { type: Schema.Types.ObjectId, ref: 'Project' },
times: { type: Number }
}]
});
5. 運行環境和技術選型
5.1 運行環境
服務器暫時部署在pc機上,項目可以運行在大部分瀏覽器。
5.2 技術選型
pug:一種模板引擎
bootstrap:頁面框架
jQuery:JavaScript的工具集
epress:node.js Web應用框架
mongodb:一個基於分布式文件存儲的數據庫。
6. 項目概念原型的核心工作機制
普通用戶:無需注冊,只要使用微信掃碼參與抽獎即可。可以實時查看自己的獲獎信息以及抽獎次數等基本信息。
管理員用戶:主要管理抽獎項目,對抽獎項目的獎品信息管理,對抽獎項目的各類基礎屬性進行設置以及發布。