前言
随着社会的发展,人民消费需求的旺盛,各路网络贷款平台开始像潮水一样涌出,这给了网络贷款这一新型贷款方式极大的发展空间,本系统致力于构建一个好的网络贷款平台,能够方便用户的贷款需求。因为系统的开发工作才进行了一半,因此,这里主要是根据自己的理解来进行下面的编写。
技术选型说明
SSM框架技术
SSM 框架是目前互联网公司非常流行的 J2EE 框架,它以更加轻量级、开发速度快、效率高、简单易学而广受开发者的喜爱。SSM 是 Spring 框架整合 SpingMVC 和 Mybatis 后的框架技术,是标准的 MVC 模式。
- Spring MVC 就是基于 MVC 模式的表现层框架,其核心组件是 DispatcherServlet。
DispatcherServlet 相当于一个分发控制器,负责截获来自客户端的 HTTP 请求,并交给处理器进行处理,对于处理器返回的 ModelAndView,交于视图解析器进行解析,得到视图对象,经过渲染后返回给页面。Spring MVC 通过注解的方式让 POJO 类称为请求控制器,同时还支持 RESTful 的设计风格。 - Spring 是面向企业级应用的开源框架,核心是 IOC(Inverse of Control)和 AOP(Aspect Oriented Programming)。其自身包含表现层框架 Spring MVC、持久层Spring JDBC、任务调度框架 Quartz,同时可以处理业务层事务管理。它可以可以整合 Struts2、Hibernate、Mybatis 等开源框架,它以轻量级、开放源码、服务免费等优点而广受企业级开发的青睐。
- Mybatis 是一种半自动化的 ORM(Object-Relation Mapping)映射框架,通过 XML文件配置实现 POJO 与数据库记录之间的映射关系,相比 Spring JDBC 它封装了几乎所有的 JDBC 代码,使用起来更加方便,开发效率高;相比 Hibernate 它更加轻量级,由于 SQL 代码全部写在配置文件里,SQL 的修改不需要重新运行,对于需求经常变动的互联网项目,其灵活性高、可扩展性强,具有 Hibernate 不可比拟的优势。
Apache Tomcat服务器环境
Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全局管理和Tomcat阀等。由于Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器。但是,不能将Tomcat和Apache HTTP服务器混淆,Apache HTTP服务器是用C语言实现的HTTPWeb服务器;这两个HTTP web server不是捆绑在一起的。Apache Tomcat包含了配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。一般用在Java Web项目中。
因为项目还没有部署,这里只给出在我们本机IDE上,IDE自动给我们部署的方法。
在IntelliJ IDEA中,当我们安装完成Tomcat后,使用Edit Configuration配置参数可以将我们的Tomcat配置进入IDE中,此后,IDEA将拷贝一份Tomcat进入项目根目录,并将为我们自动产生War Exploded包,并存放到此项目的.idea根目录下。War exploded模式是直接把文件夹、页面 、classes等等移到Tomcat部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。所谓热部署,即当我们在开发时即使修改页面,也是可以即使反馈出来的。
Docker
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
因为项目才开发了一部分,并没有开发完成,这里只能给出一个粗略的部署方案。
由于SSM项目中没有自带的服务器,所以这里需要将项目打包为War包通过dockerfile上传至容器中的Tomcat的webapps目录下,当然,首先要用docker拉取Tomcat服务器和Mysql数据库。
项目设计方案
B/S和C/S的软件架构
Client/Server(C/S)和Browser/Server(B/S)是我们常用的对软件的网络结构特点的表述方式,但它们背后蕴含着一种普遍存在的软件架构风格,即客户-服务模式的架构风格。
在客户-服务模式中,客户是主动的,服务是被动的。客户知道它向哪个服务发出请求,而服务却不知道它正在为哪个客户提供服务,甚至不知道正在为多少客户提供服务。
客户-服务模式的架构风格具有典型的模块化特征,降低了系统中客户和服务构件之间耦合度,提高了服务构件的可重用性。
下面为本项目软件架构的示意图:
MVC模式的开发架构
MVC即为Model-View-Controller(模型-视图-控制器),MVC是一种设计模式,以MVC设计模式为主体结构实现的基础代码框架一般称为MVC框架,如果MVC设计模式决定了整个软件的架构,不管是直接实现了MVC模式还是以某一种MVC框架为基础,只要软件的整体结构主要表现为MVC模式,我们就称为该软件的架构为MVC架构。
MVC中M、V和C所代表的含义如下:
- Model(模型)代表一个存取数据的对象及其数据模型。
- View(视图)代表模型包含的数据的表达方式,一般表达为可视化的界面接口。
- Controller(控制器)作用于模型和视图上,控制数据流向模型对象,并在数据变化时更新视图。控制器可以使视图与模型分离开解耦合。
这里采用了基于MVC的Java Web项目开发架构,因为MVC事实上只是一种设计思想,这种设计思想的目的是为了解耦,因此本项目在实际应用时并非完全只划分了Model-View-Controller三层,我们在这之上略微有些许延伸,事实上,很多实际的Java Web项目的开发都是这样做的。本项目的业务逻辑类主要分为以下三大块:
- Dao层:数据库访问层,对应数据库表做增删改查。
- Service层:对Dao层的增删改查整合,通过这一层来进行解耦,使得Dao层内的变化不会直接影响到Controller层。
- Controller层:定义路由访问,对service层整合。
Restful风格的接口设计
REST(Representational State Transfer),翻译为表现层状态转换,是一种基于命名资源的软件架构方式。而所谓资源指的是网络上的一个具体信息,用URI(Universal Resource Identifier)指向它,因此上网就变成了与网上―资进行信息交互,调用它的 URI。由于 HTTP 协议的无状态性,使得客户端与服务器端的请求是无状态的,所有状态信息都需要在服务器端保存。通常客户端通过 HTTP 协议的 GET、PUST、PUT 和 DELETE 这四种方法,来操作服务端数据,实现数据在表现层的状态转换。
RESTful 架构,是一种软件设计风格,被广泛用于互联网系统,它具有设计简洁、层次分明、支持缓存、可伸缩性强的特点。其设计理念如下:
- 用每一个 URI 代表一种资源;
- 在客户端与服务器之间有传递这种资源的表现层;
- 客户端通过 HTTP 的四个方法,对服务器端的资源进行操作,实现表现层的状态转换。
采用 RESTful 的架构风格对系统中各个模块的接口进行设计,将接口数据抽象成资源,以 URI 的方式呈献给用户。这种设计方式最大效率的实现资源共享,使得开发出的系统更健壮,对业务流程的变化和技术更新有更好的适应性。用户在前端页面的请求会通过 HTTP 方法传递到服务接口进行处理,服务接口将数据封装成 JSON格式的字符返回给前端页面,表现层经过处理后呈现给用户。
这是本项目中前端子系统的Restful风格的接口设计:
模块 | 功能 | URI |
---|---|---|
前置模块 | 用户登录 | /api/user/login |
用户注册 | /api/user/register | |
实名认证 | /api/user/certification | |
找回密码 | /api/user/forgetPassword | |
借贷模块 | 提交基本资料 | /api/data/submit |
查询待提交/待审核/审核不通过/审核通过的借款 | /api/borrow/query |
后台子系统的接口设计:
模块 | 功能 | URI |
---|---|---|
系统设置 | 区域查询 | /admin/area/view |
新增/修改区域 | /admin/area/input | |
区域详情查看 | /admin/area/detail | |
查看用户列表 | /admin/user/view | |
新增用户 | /admin/user/input | |
查看角色列表 | /admin/role/view | |
新增角色 | /admin/role/input | |
删除角色 | /admin/role/delete | |
设置用户角色 | /admin/role/role_user | |
设置角色权限 | /admin/role/role_permission | |
日志列表 | /admin/log/view | |
财务管理 | 查看打款/收款列表 | /admin/finacial/view/{page}/{state} |
打款 | /admin/financial/payment | |
收款 | /admin/financial/collection | |
获得打款/收款详情页 | /admin/financial/{pageType}/{state}/tab | |
贷后管理 | 逾期管理查看 | /admin/loanafter/view |
强制收款 | /admin/loanafter/collection |
软件系统概念原型的不同视图
分解视图
具体功能子模块见上述RESTful api设计,这里不再赘述。
依赖视图
这里我们的分层是基于MVC的扩展,其中Controller,Dao,Service层之间的依赖如下所示:
表单的提交或者AJAX异步请求,采用Controller层进行转发到Service层业务处理,这里的NAS即Network Attached Storage:网络附属存储,也就是业务类所调用的一些临时存储,并非数据库存储,Service之后调用Dao层,Dao层与数据库之间产生交互。
执行视图
这里给出本系统中最重要的一个执行视图作为说明,即借款操作执行视图:
实现视图
前置模块实现视图:
因为系统开发尚未完成,这里再给出一个重要的借款过程实现视图:
部署视图
网上找了一张,比较形象:
工作分配视图
工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。
因为我们的项目是我和同学两个人完成的,前后端分离,一人前端一人后端,每个人都是一个独立的开发线,每个人的工作非常明确,因此无需进行工作分配。
数据库设计
数据库选型
国内市面上常用的主流数据库包括 Oracle、SQL Server 和 MySQL 等。其中 Oracle 和 SQL Server 多用于大型网站或项目,服务性质为收费昂贵且价格。MySQL 数据库为免费开源数据库,适用于中小型网站或项目。三大主流数据库对照表如下:
可以看到,MySQL 数据库最为一种轻便易用的免费开源数据库,被广泛应用到互联网项目中,虽然 MySQL 数据库的性能不及 Oracle 和 SQL Server 优秀,但对于小型互联网这种对性能要求不是很严格的项目已经足够,加上对项目资金的考虑,MySQL 是最好的选择。
数据库内部设计
下面给出本项目所用到的主要数据库表。
用户表(通过用户组和权限来区分三大用户):
字段 | 说明 |
---|---|
id | 用户id |
user | 用户名 |
user_group | 用户组名 |
area | 城市码表 |
role | 角色 |
permission | 权限 |
loan_product_info | 贷款产品信息 |
loan_product_type | 贷款产品类型 |
user_loan_basic | 用户贷款基本信息 |
user_loan_detail | 用户贷款明细 |
user_loan_doc | 用户贷款资料 |
user_loan_cost | 用户贷款费用 |
op_log | 操作日志 |
贷款产品表:
字段 | 说明 |
---|---|
id | 贷款产品id |
product_name | 产品名称 |
loan_type | 贷款类型 |
is_effective | 是否有效 |
effective_date | 生效日期 |
ineffective_date | 失效日期 |
create_time | 记录创建时间 |
update_time | 记录更新时间 |
create_by | 记录创建人id |
update_by | 记录更新人id |
用户借款信息表:
字段 | 说明 |
---|---|
id | 贷款产品id |
product_name | 产品名称 |
apply_user_id | 申请用户id |
apply_user_name | 申请用户名 |
sales_man_id | 业务员id |
sales_man_name | 业务员名 |
apply_time | 申请时间 |
audit_user_id | 审核人id |
audit_user_name | 审核人姓名 |
audit_time | 审核时间 |
pay_time | 打款时间 |
create_time | 记录创建时间 |
update_time | 记录更新时间 |
系统概念原型的核心工作机制
概念原型
概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论。
概念原型是一种虚拟的、理想化的软件产品形式。
核心工作机制
这里简单地模拟一下三大用户的工作过程,我们的系统在设计完成后可以模拟以下工作过程进行测试。
普通用户:
- 注册账户 => 登录 => 提交借款
- 登录 => 注册账户 => 登录 => 提交借款
- 登录 => 忘记密码 => 修改密码 => 登录 => 提交借款
业务员:
- 添加借款 => 异常处理 => 上传失败 => 添加失败
- 添加借款 => 异常处理 => 资料上传 => 异常处理 => 上传失败 => 添加失败
- 添加借款 => 资料上传 => 上传成功 => 添加成功
- 添加借款 => 异常处理 => 资料上传 => 上传成功 => 添加成功
- 添加借款 => 异常处理 => 资料上传 => 异常处理 => 上传成功 => 添加成功
超级管理员:
- 用户管理 => 添加用户信息
- 用户管理 => 更新用户信息
- 用户管理 => 删除用户信息
- 用户管理 => 导出用户列表
- 角色管理 => 新增角色
- 角色管理 => 调整角色
- 角色管理 => 删除角色
- 区域设置 => 业务员信息设置
- 区域设置 => 系统信息设置
- 操作日志 => 导出操作日志
总结
本文主要采用老师上课所讲方法对自己所做的系统进行一个类似预算的设计方案,因为项目才开始一点点,还有很多地方没有想到,很不细致。当然,这次博客的目的还是达到了,就是学习书写软件工程的设计方案。
参考资料
- https://gitee.com/mengning997/se/tree/master/ppt
- 《UML教程》
https://www.w3cschool.cn/uml_tutorial/ - 《三层架构:表示层-业务逻辑层-数据访问层》
https://blog.csdn.net/m0_37033566/article/details/53787055 - 《如何设计Service层》
https://blog.csdn.net/qq_34339493/article/details/86479991 - 《Service层和Controller层的开发》
https://www.jianshu.com/p/553980575709 - 《数据库建模三步骤:概念模型->逻辑模型->物理模型》
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