在线借贷平台软件系统设计方案
前言
隨著社會(huì)的發(fā)展,人民消費(fèi)需求的旺盛,各路網(wǎng)絡(luò)貸款平臺(tái)開始像潮水一樣涌出,這給了網(wǎng)絡(luò)貸款這一新型貸款方式極大的發(fā)展空間,本系統(tǒng)致力于構(gòu)建一個(gè)好的網(wǎng)絡(luò)貸款平臺(tái),能夠方便用戶的貸款需求。因?yàn)橄到y(tǒng)的開發(fā)工作才進(jìn)行了一半,因此,這里主要是根據(jù)自己的理解來進(jìn)行下面的編寫。
技術(shù)選型說明
SSM框架技術(shù)
SSM 框架是目前互聯(lián)網(wǎng)公司非常流行的 J2EE 框架,它以更加輕量級(jí)、開發(fā)速度快、效率高、簡(jiǎn)單易學(xué)而廣受開發(fā)者的喜愛。SSM 是 Spring 框架整合 SpingMVC 和 Mybatis 后的框架技術(shù),是標(biāo)準(zhǔn)的 MVC 模式。
Spring MVC 就是基于 MVC 模式的表現(xiàn)層框架,其核心組件是 DispatcherServlet。
DispatcherServlet 相當(dāng)于一個(gè)分發(fā)控制器,負(fù)責(zé)截獲來自客戶端的 HTTP 請(qǐng)求,并交給處理器進(jìn)行處理,對(duì)于處理器返回的 ModelAndView,交于視圖解析器進(jìn)行解析,得到視圖對(duì)象,經(jīng)過渲染后返回給頁面。Spring MVC 通過注解的方式讓 POJO 類稱為請(qǐng)求控制器,同時(shí)還支持 RESTful 的設(shè)計(jì)風(fēng)格。
Spring 是面向企業(yè)級(jí)應(yīng)用的開源框架,核心是 IOC(Inverse of Control)和 AOP(Aspect Oriented Programming)。其自身包含表現(xiàn)層框架 Spring MVC、持久層Spring JDBC、任務(wù)調(diào)度框架 Quartz,同時(shí)可以處理業(yè)務(wù)層事務(wù)管理。它可以可以整合 Struts2、Hibernate、Mybatis 等開源框架,它以輕量級(jí)、開放源碼、服務(wù)免費(fèi)等優(yōu)點(diǎn)而廣受企業(yè)級(jí)開發(fā)的青睞。
Mybatis 是一種半自動(dòng)化的 ORM(Object-Relation Mapping)映射框架,通過 XML文件配置實(shí)現(xiàn) POJO 與數(shù)據(jù)庫記錄之間的映射關(guān)系,相比 Spring JDBC 它封裝了幾乎所有的 JDBC 代碼,使用起來更加方便,開發(fā)效率高;相比 Hibernate 它更加輕量級(jí),由于 SQL 代碼全部寫在配置文件里,SQL 的修改不需要重新運(yùn)行,對(duì)于需求經(jīng)常變動(dòng)的互聯(lián)網(wǎng)項(xiàng)目,其靈活性高、可擴(kuò)展性強(qiáng),具有 Hibernate 不可比擬的優(yōu)勢(shì)。
Apache Tomcat服務(wù)器環(huán)境
Tomcat是由Apache軟件基金會(huì)屬下Jakarta項(xiàng)目開發(fā)的Servlet容器,按照Sun Microsystems提供的技術(shù)規(guī)范并提供了作為Web服務(wù)器的一些特有功能,如Tomcat管理和控制平臺(tái)、安全局管理和Tomcat閥等。由于Tomcat本身也內(nèi)含了HTTP服務(wù)器,因此也可以視作單獨(dú)的Web服務(wù)器。但是,不能將Tomcat和Apache HTTP服務(wù)器混淆,Apache HTTP服務(wù)器是用C語言實(shí)現(xiàn)的HTTPWeb服務(wù)器;這兩個(gè)HTTP web server不是捆綁在一起的。Apache Tomcat包含了配置管理工具,也可以通過編輯XML格式的配置文件來進(jìn)行配置。一般用在Java Web項(xiàng)目中。
因?yàn)轫?xiàng)目還沒有部署,這里只給出在我們本機(jī)IDE上,IDE自動(dòng)給我們部署的方法。
在IntelliJ IDEA中,當(dāng)我們安裝完成Tomcat后,使用Edit Configuration配置參數(shù)可以將我們的Tomcat配置進(jìn)入IDE中,此后,IDEA將拷貝一份Tomcat進(jìn)入項(xiàng)目根目錄,并將為我們自動(dòng)產(chǎn)生War Exploded包,并存放到此項(xiàng)目的.idea根目錄下。War exploded模式是直接把文件夾、頁面 、classes等等移到Tomcat部署文件夾里面,進(jìn)行加載部署。因此這種方式支持熱部署,一般在開發(fā)的時(shí)候也是用這種方式。所謂熱部署,即當(dāng)我們?cè)陂_發(fā)時(shí)即使修改頁面,也是可以即使反饋出來的。
Docker
Docker 屬于 Linux 容器的一種封裝,提供簡(jiǎn)單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。
Docker 將應(yīng)用程序與該程序的依賴,打包在一個(gè)文件里面。運(yùn)行這個(gè)文件,就會(huì)生成一個(gè)虛擬容器。程序在這個(gè)虛擬容器里運(yùn)行,就好像在真實(shí)的物理機(jī)上運(yùn)行一樣。有了 Docker,就不用擔(dān)心環(huán)境問題。
總體來說,Docker 的接口相當(dāng)簡(jiǎn)單,用戶可以方便地創(chuàng)建和使用容器,把自己的應(yīng)用放入容器。容器還可以進(jìn)行版本管理、復(fù)制、分享、修改,就像管理普通的代碼一樣。
因?yàn)轫?xiàng)目才開發(fā)了一部分,并沒有開發(fā)完成,這里只能給出一個(gè)粗略的部署方案。
由于SSM項(xiàng)目中沒有自帶的服務(wù)器,所以這里需要將項(xiàng)目打包為War包通過dockerfile上傳至容器中的Tomcat的webapps目錄下,當(dāng)然,首先要用docker拉取Tomcat服務(wù)器和Mysql數(shù)據(jù)庫。
項(xiàng)目設(shè)計(jì)方案
B/S和C/S的軟件架構(gòu)
Client/Server(C/S)和Browser/Server(B/S)是我們常用的對(duì)軟件的網(wǎng)絡(luò)結(jié)構(gòu)特點(diǎn)的表述方式,但它們背后蘊(yùn)含著一種普遍存在的軟件架構(gòu)風(fēng)格,即客戶-服務(wù)模式的架構(gòu)風(fēng)格。
在客戶-服務(wù)模式中,客戶是主動(dòng)的,服務(wù)是被動(dòng)的。客戶知道它向哪個(gè)服務(wù)發(fā)出請(qǐng)求,而服務(wù)卻不知道它正在為哪個(gè)客戶提供服務(wù),甚至不知道正在為多少客戶提供服務(wù)。
客戶-服務(wù)模式的架構(gòu)風(fēng)格具有典型的模塊化特征,降低了系統(tǒng)中客戶和服務(wù)構(gòu)件之間耦合度,提高了服務(wù)構(gòu)件的可重用性。
下面為本項(xiàng)目軟件架構(gòu)的示意圖:
MVC模式的開發(fā)架構(gòu)
MVC即為Model-View-Controller(模型-視圖-控制器),MVC是一種設(shè)計(jì)模式,以MVC設(shè)計(jì)模式為主體結(jié)構(gòu)實(shí)現(xiàn)的基礎(chǔ)代碼框架一般稱為MVC框架,如果MVC設(shè)計(jì)模式?jīng)Q定了整個(gè)軟件的架構(gòu),不管是直接實(shí)現(xiàn)了MVC模式還是以某一種MVC框架為基礎(chǔ),只要軟件的整體結(jié)構(gòu)主要表現(xiàn)為MVC模式,我們就稱為該軟件的架構(gòu)為MVC架構(gòu)。
MVC中M、V和C所代表的含義如下:
Model(模型)代表一個(gè)存取數(shù)據(jù)的對(duì)象及其數(shù)據(jù)模型。
View(視圖)代表模型包含的數(shù)據(jù)的表達(dá)方式,一般表達(dá)為可視化的界面接口。
Controller(控制器)作用于模型和視圖上,控制數(shù)據(jù)流向模型對(duì)象,并在數(shù)據(jù)變化時(shí)更新視圖。控制器可以使視圖與模型分離開解耦合。
這里采用了基于MVC的Java Web項(xiàng)目開發(fā)架構(gòu),因?yàn)镸VC事實(shí)上只是一種設(shè)計(jì)思想,這種設(shè)計(jì)思想的目的是為了解耦,因此本項(xiàng)目在實(shí)際應(yīng)用時(shí)并非完全只劃分了Model-View-Controller三層,我們?cè)谶@之上略微有些許延伸,事實(shí)上,很多實(shí)際的Java Web項(xiàng)目的開發(fā)都是這樣做的。本項(xiàng)目的業(yè)務(wù)邏輯類主要分為以下三大塊:
Dao層:數(shù)據(jù)庫訪問層,對(duì)應(yīng)數(shù)據(jù)庫表做增刪改查。
Service層:對(duì)Dao層的增刪改查整合,通過這一層來進(jìn)行解耦,使得Dao層內(nèi)的變化不會(huì)直接影響到Controller層。
Controller層:定義路由訪問,對(duì)service層整合。
Restful風(fēng)格的接口設(shè)計(jì)
REST(Representational State Transfer),翻譯為表現(xiàn)層狀態(tài)轉(zhuǎn)換,是一種基于命名資源的軟件架構(gòu)方式。而所謂資源指的是網(wǎng)絡(luò)上的一個(gè)具體信息,用URI(Universal Resource Identifier)指向它,因此上網(wǎng)就變成了與網(wǎng)上―資進(jìn)行信息交互,調(diào)用它的 URI。由于 HTTP 協(xié)議的無狀態(tài)性,使得客戶端與服務(wù)器端的請(qǐng)求是無狀態(tài)的,所有狀態(tài)信息都需要在服務(wù)器端保存。通常客戶端通過 HTTP 協(xié)議的 GET、PUST、PUT 和 DELETE 這四種方法,來操作服務(wù)端數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)在表現(xiàn)層的狀態(tài)轉(zhuǎn)換。
RESTful 架構(gòu),是一種軟件設(shè)計(jì)風(fēng)格,被廣泛用于互聯(lián)網(wǎng)系統(tǒng),它具有設(shè)計(jì)簡(jiǎn)潔、層次分明、支持緩存、可伸縮性強(qiáng)的特點(diǎn)。其設(shè)計(jì)理念如下:
用每一個(gè) URI 代表一種資源;
在客戶端與服務(wù)器之間有傳遞這種資源的表現(xiàn)層;
客戶端通過 HTTP 的四個(gè)方法,對(duì)服務(wù)器端的資源進(jìn)行操作,實(shí)現(xiàn)表現(xiàn)層的狀態(tài)轉(zhuǎn)換。
采用 RESTful 的架構(gòu)風(fēng)格對(duì)系統(tǒng)中各個(gè)模塊的接口進(jìn)行設(shè)計(jì),將接口數(shù)據(jù)抽象成資源,以 URI 的方式呈獻(xiàn)給用戶。這種設(shè)計(jì)方式最大效率的實(shí)現(xiàn)資源共享,使得開發(fā)出的系統(tǒng)更健壯,對(duì)業(yè)務(wù)流程的變化和技術(shù)更新有更好的適應(yīng)性。用戶在前端頁面的請(qǐng)求會(huì)通過 HTTP 方法傳遞到服務(wù)接口進(jìn)行處理,服務(wù)接口將數(shù)據(jù)封裝成 JSON格式的字符返回給前端頁面,表現(xiàn)層經(jīng)過處理后呈現(xiàn)給用戶。
這是本項(xiàng)目中前端子系統(tǒng)的Restful風(fēng)格的接口設(shè)計(jì):
| 模塊 | 功能 | URI |
|---|---|---|
| 前置模塊 | 用戶登錄 | /api/user/login |
| 用戶注冊(cè) | /api/user/register | |
| 實(shí)名認(rèn)證 | /api/user/certification | |
| 找回密碼 | /api/user/forgetPassword | |
| 借貸模塊 | 提交基本資料 | /api/data/submit |
| 查詢待提交/待審核/審核不通過/審核通過的借款 | /api/borrow/query |
后臺(tái)子系統(tǒng)的接口設(shè)計(jì):
| 模塊 | 功能 | URI |
|---|---|---|
| 系統(tǒng)設(shè)置 | 區(qū)域查詢 | /admin/area/view |
| 新增/修改區(qū)域 | /admin/area/input | |
| 區(qū)域詳情查看 | /admin/area/detail | |
| 查看用戶列表 | /admin/user/view | |
| 新增用戶 | /admin/user/input | |
| 查看角色列表 | /admin/role/view | |
| 新增角色 | /admin/role/input | |
| 刪除角色 | /admin/role/delete | |
| 設(shè)置用戶角色 | /admin/role/role_user | |
| 設(shè)置角色權(quán)限 | /admin/role/role_permission | |
| 日志列表 | /admin/log/view | |
| 財(cái)務(wù)管理 | 查看打款/收款列表 | /admin/finacial/view/{page}/{state} |
| 打款 | /admin/financial/payment | |
| 收款 | /admin/financial/collection | |
| 獲得打款/收款詳情頁 | /admin/financial/{pageType}/{state}/tab | |
| 貸后管理 | 逾期管理查看 | /admin/loanafter/view |
| 強(qiáng)制收款 | /admin/loanafter/collection |
軟件系統(tǒng)概念原型的不同視圖
分解視圖
具體功能子模塊見上述RESTful api設(shè)計(jì),這里不再贅述。
依賴視圖
這里我們的分層是基于MVC的擴(kuò)展,其中Controller,Dao,Service層之間的依賴如下所示:
表單的提交或者AJAX異步請(qǐng)求,采用Controller層進(jìn)行轉(zhuǎn)發(fā)到Service層業(yè)務(wù)處理,這里的NAS即Network Attached Storage:網(wǎng)絡(luò)附屬存儲(chǔ),也就是業(yè)務(wù)類所調(diào)用的一些臨時(shí)存儲(chǔ),并非數(shù)據(jù)庫存儲(chǔ),Service之后調(diào)用Dao層,Dao層與數(shù)據(jù)庫之間產(chǎn)生交互。
執(zhí)行視圖
這里給出本系統(tǒng)中最重要的一個(gè)執(zhí)行視圖作為說明,即借款操作執(zhí)行視圖:
實(shí)現(xiàn)視圖
前置模塊實(shí)現(xiàn)視圖:
因?yàn)橄到y(tǒng)開發(fā)尚未完成,這里再給出一個(gè)重要的借款過程實(shí)現(xiàn)視圖:
部署視圖
網(wǎng)上找了一張,比較形象:
工作分配視圖
工作分配視圖將系統(tǒng)分解成可獨(dú)立完成的工作任務(wù),以便分配給各項(xiàng)目團(tuán)隊(duì)和成員。工作分配視圖有利于跟蹤不同項(xiàng)目團(tuán)隊(duì)和成員的工作任務(wù)的進(jìn)度,也有利于在個(gè)項(xiàng)目團(tuán)隊(duì)和成員之間合理地分配和調(diào)整項(xiàng)目資源,甚至在項(xiàng)目計(jì)劃階段工作分配視圖對(duì)于進(jìn)度規(guī)劃、項(xiàng)目評(píng)估和經(jīng)費(fèi)預(yù)算都能起到有益的作用。
因?yàn)槲覀兊捻?xiàng)目是我和同學(xué)兩個(gè)人完成的,前后端分離,一人前端一人后端,每個(gè)人都是一個(gè)獨(dú)立的開發(fā)線,每個(gè)人的工作非常明確,因此無需進(jìn)行工作分配。
數(shù)據(jù)庫設(shè)計(jì)
數(shù)據(jù)庫選型
國內(nèi)市面上常用的主流數(shù)據(jù)庫包括 Oracle、SQL Server 和 MySQL 等。其中 Oracle 和 SQL Server 多用于大型網(wǎng)站或項(xiàng)目,服務(wù)性質(zhì)為收費(fèi)昂貴且價(jià)格。MySQL 數(shù)據(jù)庫為免費(fèi)開源數(shù)據(jù)庫,適用于中小型網(wǎng)站或項(xiàng)目。三大主流數(shù)據(jù)庫對(duì)照表如下:
可以看到,MySQL 數(shù)據(jù)庫最為一種輕便易用的免費(fèi)開源數(shù)據(jù)庫,被廣泛應(yīng)用到互聯(lián)網(wǎng)項(xiàng)目中,雖然 MySQL 數(shù)據(jù)庫的性能不及 Oracle 和 SQL Server 優(yōu)秀,但對(duì)于小型互聯(lián)網(wǎng)這種對(duì)性能要求不是很嚴(yán)格的項(xiàng)目已經(jīng)足夠,加上對(duì)項(xiàng)目資金的考慮,MySQL 是最好的選擇。
數(shù)據(jù)庫內(nèi)部設(shè)計(jì)
下面給出本項(xiàng)目所用到的主要數(shù)據(jù)庫表。
用戶表(通過用戶組和權(quán)限來區(qū)分三大用戶):
| 字段 | 說明 |
|---|---|
| id | 用戶id |
| user | 用戶名 |
| user_group | 用戶組名 |
| area | 城市碼表 |
| role | 角色 |
| permission | 權(quán)限 |
| loan_product_info | 貸款產(chǎn)品信息 |
| loan_product_type | 貸款產(chǎn)品類型 |
| user_loan_basic | 用戶貸款基本信息 |
| user_loan_detail | 用戶貸款明細(xì) |
| user_loan_doc | 用戶貸款資料 |
| user_loan_cost | 用戶貸款費(fèi)用 |
| op_log | 操作日志 |
貸款產(chǎn)品表:
| 字段 | 說明 |
|---|---|
| id | 貸款產(chǎn)品id |
| product_name | 產(chǎn)品名稱 |
| loan_type | 貸款類型 |
| is_effective | 是否有效 |
| effective_date | 生效日期 |
| ineffective_date | 失效日期 |
| create_time | 記錄創(chuàng)建時(shí)間 |
| update_time | 記錄更新時(shí)間 |
| create_by | 記錄創(chuàng)建人id |
| update_by | 記錄更新人id |
用戶借款信息表:
| 字段 | 說明 |
|---|---|
| id | 貸款產(chǎn)品id |
| product_name | 產(chǎn)品名稱 |
| apply_user_id | 申請(qǐng)用戶id |
| apply_user_name | 申請(qǐng)用戶名 |
| sales_man_id | 業(yè)務(wù)員id |
| sales_man_name | 業(yè)務(wù)員名 |
| apply_time | 申請(qǐng)時(shí)間 |
| audit_user_id | 審核人id |
| audit_user_name | 審核人姓名 |
| audit_time | 審核時(shí)間 |
| pay_time | 打款時(shí)間 |
| create_time | 記錄創(chuàng)建時(shí)間 |
| update_time | 記錄更新時(shí)間 |
系統(tǒng)概念原型的核心工作機(jī)制
概念原型
概念是人對(duì)能代表某種事物或發(fā)展過程的特點(diǎn)及意義所形成的思維結(jié)論。
概念原型是一種虛擬的、理想化的軟件產(chǎn)品形式。
核心工作機(jī)制
這里簡(jiǎn)單地模擬一下三大用戶的工作過程,我們的系統(tǒng)在設(shè)計(jì)完成后可以模擬以下工作過程進(jìn)行測(cè)試。
普通用戶:
注冊(cè)賬戶 => 登錄 => 提交借款
登錄 => 注冊(cè)賬戶 => 登錄 => 提交借款
登錄 => 忘記密碼 => 修改密碼 => 登錄 => 提交借款
業(yè)務(wù)員:
添加借款 => 異常處理 => 上傳失敗 => 添加失敗
添加借款 => 異常處理 => 資料上傳 => 異常處理 => 上傳失敗 => 添加失敗
添加借款 => 資料上傳 => 上傳成功 => 添加成功
添加借款 => 異常處理 => 資料上傳 => 上傳成功 => 添加成功
添加借款 => 異常處理 => 資料上傳 => 異常處理 => 上傳成功 => 添加成功
超級(jí)管理員:
用戶管理 => 添加用戶信息
用戶管理 => 更新用戶信息
用戶管理 => 刪除用戶信息
用戶管理 => 導(dǎo)出用戶列表
角色管理 => 新增角色
角色管理 => 調(diào)整角色
角色管理 => 刪除角色
區(qū)域設(shè)置 => 業(yè)務(wù)員信息設(shè)置
區(qū)域設(shè)置 => 系統(tǒng)信息設(shè)置
操作日志 => 導(dǎo)出操作日志
總結(jié)
本文主要采用老師上課所講方法對(duì)自己所做的系統(tǒng)進(jìn)行一個(gè)類似預(yù)算的設(shè)計(jì)方案,因?yàn)轫?xiàng)目才開始一點(diǎn)點(diǎn),還有很多地方?jīng)]有想到,很不細(xì)致。當(dāng)然,這次博客的目的還是達(dá)到了,就是學(xué)習(xí)書寫軟件工程的設(shè)計(jì)方案。
參考資料
https://gitee.com/mengning997/se/tree/master/ppt
《UML教程》
https://www.w3cschool.cn/uml_tutorial/
《三層架構(gòu):表示層-業(yè)務(wù)邏輯層-數(shù)據(jù)訪問層》
https://blog.csdn.net/m0_37033566/article/details/53787055
《如何設(shè)計(jì)Service層》
https://blog.csdn.net/qq_34339493/article/details/86479991
《Service層和Controller層的開發(fā)》
https://www.jianshu.com/p/553980575709
《數(shù)據(jù)庫建模三步驟:概念模型->邏輯模型->物理模型》
https://blog.csdn.net/caodongfang126/article/details/90665339
《阿里云安裝Tomcat》
https://blog.csdn.net/aa787282301/article/details/86326605
《Apache Tomcat Introduction》
http://tomcat.apache.org/
《菜鳥教程-Docker教程》
https://www.runoob.com/docker/docker-tutorial.html
總結(jié)
以上是生活随笔為你收集整理的在线借贷平台软件系统设计方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一个go程序
- 下一篇: wordpress数据库优化和清理冗余数