项目概述-逐字稿
# 项目概述
同学们,我们的课程进行到现在,已经学习了很多种技术,在JavaSE阶段我们学习了Java基础语法、面向对象概念、集合、IO、多线程等; 在JavaWeb阶段我们学习了MySQL、JDBC、MyBatis、Servlet、JSP、Tomcat、Html&CSS、JS、Ajax、Vue&ElementUI; 在基础框架阶段学习了Spring、SpringMVC、SpringBoot、MyBatis-Plus;还有我们刚刚结束学习的Git、Redis、Linux等。 学习了这么的Java相关的技术,估计有同学就要问了,在企业项目开发中如何来应用它们呢?
为了回答这个问题,从今天开始我们的课程就进入一个新的阶段--项目实战,本次我们要做的项目叫瑞吉点餐,目标是通过本阶段课程的学习, 回顾并融合之前学习的技术,并且可以让同学们对企业软件开发工作有一个比较清晰的认知。
下面,我们就来了解一下瑞吉点餐的项目背景:大概看一下这段文字,总结一下就是大学生小王,为了提高父亲老王经营餐厅的效益, 利用自己大学学到的编程知识,开发的一套在线订餐系统。
为了给大家一个更直观的展示,我们可以先来看下这个项目的最终效果,首先是我们的用户端:
相信大家看到这个页面肯定不会陌生,这个页面就是供用户浏览菜品、下单结算的页面,和饿了么、美团的界面非常类似。
然后,是我们的系统后台管理端:
管理端主要负责员工、菜品、订单等数据的管理,饿了么、美团等外卖软件一般也有这样的页面,不过我们普通用户看不到而已。
瑞吉点餐这个项目我们计划分两个阶段实施:
- 从0-1阶段,先整体完成系统各个功能
- 从1-100阶段,优化扩展系统功能。
在项目实战开始前,我们还需要再了解两部分内容:
- 企业软件开发整体介绍
- 瑞吉外卖项目介绍
咱们先来看第一部分:软件开发整体介绍,通过这一部分的学习,就可以对企业软件开发有一个整体的了解,这非常有利于咱们以后的工作。 针对软件开发整体介绍我们分为三小节进行讲解,第一个就是软件开发流程,在JavaWeb阶段我们曾经介绍过企业当中的软件开发流程, 不知道有没有同学还记得有那几个步骤?大家可以先回忆一下,等下找位同学来回答一下。第二个就是角色分工, 在企业当中一个项目,尤其是大型项目,并不是一个人来完成的,它是由多个人分工协作,因此我们就要明确项目组成员的角色分工, 第三个就是关于软件环境,在企业软件开发过程中我们一般会用到开发、测试、生产这三个环境,至于这三个环境是如何定义的,我们后面在详细讲解。
上面的问题软件开发流程有哪几个步骤有同学想起来了吗?谁来回答一下?好的,下面再带大家回顾一下软件的开发流程, 在企业当中软件开发流程会有五个阶段
- 第一个阶段:需求分析,主要有项目经理或者产品经理来完成需求调研,原型设计,需求规格说明书等工作
- 第二个阶段:设计,包括UI设计,架构设计、概要设计,详细设计,数据库设计
- 第三个阶段:编码实现,由开发人员、后台、前端实现业务功能,然后进行单元测试,自测、联调测试等工作
- 第四个阶段:测试阶段,有测试人员编写测试用例,进行系统测试,输出测试报告,
- 第五个阶段:上线运维阶段,将代码编译打包,交由运维工程师部署上线,交付用户使用
上面在介绍软件开发流程时,已经带入了项目组的一些角色,比如产品经理、运维工程师等,下面我们就来系统的介绍一下项目组成员的角色分工, 一个项目组中一般有这7中角色:
- 项目经理:对整个项目复制,负责人员调配、任务分工、进度跟进等
- 产品经理:进行需求调研,输出需求调研文档和产品设计原型等
- UI设计师:根据产品原型输出UI效果图
- 架构师:项目整体架构、技术选型等设计工作
- 开发工程师:代码实现、联调对接
- 测试工程师:编写测试用例,输出测试报告
- 运维工程师:软件环境搭建、项目部署上线等
我们刚刚讲解了软件开发流程和项目组成员角色分工,那接下来我们在看一下在这个流程当中涉及到哪些环境,前面也简单介绍了会涉及三个环境:开发、测试、生产 开发:是开发人员在看法阶段使用的环境 测试:专门给测试人员使用的环境,用于测试项目 生产:即线上环境,正式提供给用户使用的环境 这三个环境的数据是隔离的,以避免互相影响
# 项目详细介绍
上面我们已经了解企业软件开发涉及到的流程、角色、环境等信息,下面我们就结合企业软件开发场景来介绍下瑞吉点餐这个项目。
咱们回归到瑞吉点餐这个项目的项目背景,小王计划开发一个在线点餐系统,但是他意识到无法一个人将该项目开发完成,此时他就找到了曾在软件企业担任过开发经理的老师,也就是我来支持他的工作。
我接到小王的请求后,计划以企业软件开发流程的五个阶段来协助小王完成这个瑞吉点餐项目的开发。
# 需求分析
首先,是需求分析阶段,由于小王项目经验有限,此时就需要我客串一下产品经理的岗位。通过与小王、老王沟通,我大致了解到这个项目的一个用途:本项目,也即是瑞吉点餐系统是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,小王的初衷是为老王经营的菩提阁餐厅开发一款在线点餐系统。了解完这些,我就要针对这个项目做一个用例分析,确定系统中涉及到哪些用户(角色)、每种用户使用哪些系统功能?经过我分析,产出了下面一张系统用例图:
从上面的用例图我们可以得知,瑞吉点餐系统从系统用户层面大致分为三个角色:系统管理员、餐厅员工、用餐客户;从系统功能层面有系统管理端和用户端,其中管理端的功能有登录退出、员工管理、分类管理、菜品管理、套餐管理、订单管理,用户端的功能有登录退出、用户地址管理、浏览菜品、下单结算等功能。
# 原型设计
上面用例分析阶段已经针对瑞吉点餐系统做了简单分析,但系统最终是什么样子还不是很直观。由于我现在还在兼职产品经理岗,产品原型设计这块工作还得由我负责。
产品原型:就是一款产品成型之前,由产品经理绘制的一个简单的页面框架,主要作用就是将页面的排版布局展现出来,使产品的初步构思有一个可视化的展示。通过原型,可以更加直观的了解项目的需求和具有的功能。
注意
产品原型主要用于展示项目的功能呢,并不是最终的页面效果。
经过我的不懈努力,产品原型最终设计如下:
瑞吉点餐项目分为管理端和用户端,管理端主要供餐饮企业内部员工使用。主要功能有:
模块 | 描述 |
---|---|
登录/退出 | 内部员工必须登录后,才可以访问系统管理后台 |
员工管理 | 管理员可以在系统后台对员工信息进行管理,包含查询、新增、编辑、禁用等功能 |
分类管理 | 主要对当前餐厅经营的 菜品分类 或 套餐分类 进行管理维护, 包含查询、新增、修改、删除等功能 |
菜品管理 | 主要维护各个分类下的菜品信息,包含查询、新增、修改、删除、启售、停售等功能 |
套餐管理 | 主要维护当前餐厅中的套餐信息,包含查询、新增、修改、删除、启售、停售等功能 |
订单明细 | 主要维护用户在移动端下的订单信息,包含查询、取消、派送、完成,以及订单报表下载等功能 |
下面我们再来看下用户端,用户端主要提供给消费者使用,主要功能有:
模块 | 描述 |
---|---|
登录/退出 | 在移动端, 用户也需要登录后使用APP进行点餐 |
点餐-菜单 | 在点餐界面需要展示出菜品分类/套餐分类, 并根据当前选择的分类加载其中的菜品信息, 供用户查询选择 |
点餐-购物车 | 用户选中的菜品就会加入用户的购物车, 主要包含 查询购物车、加入购物车、删除购物车、清空购物车等功能 |
订单支付 | 用户选完菜品/套餐后, 可以对购物车菜品进行结算支付, 这时就需要进行订单的支付 |
个人信息 | 在个人中心页面中会展示当前用户的基本信息, 用户可以管理收货地址, 也可以查询历史订单数据 |
# 系统设计
在完成瑞吉点餐项目的需求分析、原型设计后,接下来就来到我们的系统设计阶段了。下面我们就开始设计阶段的工作,而我的岗位也将由产品经理切换为架构师。
# 功能架构
首先,就是我们的功能架构,也即是确定瑞吉点餐系统所应具备的功能模块,实际上,在用例分析时我们已经大致确定了本项目所应具备的功能,此处我们就不在过多赘述。
- 用户端
主要功能有登录退出、地址管理、菜品规格浏览、购物车功能、下单结算等。
- 管理端
主要功能有登录退出、员工信息管理、菜品分类管理、菜品管理、套餐管理、订单管理等功能。
# 技术选型
作为架构师,要充分考虑业务系统功能以及开发团队成员技术栈,选用合适的技术来开发项目,也就是技术选型。针对本项目的技术选型,我将会从用户层、网关层、应用层、数据层这四个方面进行说明。
从上面的图中可以看出,本次选用的技术大部分都是我们之前学习过的。
- 用户层
本项目在构建用户端、管理端的前端页面时,我们会用到H5、Vue.js、ElementUI等技术。
- 网关层
网关层我们主要使用Nginx来实现,该项技术大家会比较陌生,不过没有关系,后面我们会进行讲解学习的。Nginx是一个服务器,主要用来作为Http高性能服务器,部署静态资源。它还有两个比较重要的作用:反向代理和负载均衡,在进行项目部署时,要实现Tomcat的负载均衡,就可以通过Nginx来实现。
- 应用层/服务层
SpringBoot: 快速构建Spring项目,采用约定优于配置的思想,简化Spring项目的配置开发。
Spring: 统一管理项目中的各种资源(bean
),在web开发的各层都会用到。
SpringMVC: SpringMVC是Spring框架的一个模块,SpringMVC和Spring无需通过中间整合层进行整合,可以无缝集成。
SpringSession: 主要解决在集群环境下的Session共享问题。
Lombok: 能以简单的注解形式来简化Java代码,提高开发人员的效率,例如省略getter/setter
方法,各种构造方法、equals
等方法的书写。
Swagger*: 可以自动的帮助开发人员生成接口文档,并对接口进行测试。
- 数据层
MySQL: 关系型数据库,本项目的核心业务数据都将存储到MySQL中。
MyBatis-Plus: 本项目持久层将会采用MyBatis-Plus来简化开发,基本的单表增删改查直接调用框架提供的方法即可。
Redis: 基于key-value格式存储的内存数据库,访问速度快,经常使用它做缓存,在第二阶段的性能优化中会使用到。
- 工具
git: 代码版本控制工具,使用该工具对项目的代码进行管理。
Maven: 项目构建工具
Junit: 单元测试工具,业务功能编码完成后,需要通过Junit对功能进行单元测试。
# 数据库设计
在技术选型完成以后,接下来概设、详设、数据库设计了。考虑到时间问题,概设、详设我们就省略吧,直接进行数据库设计。在JavaWeb阶段我们也将结果数据库设计的相关内容,那么数据库设计的内容是什么呢?哪位同学来回答一下。对的,数据库设计最终目的就是确定系统有哪些数据库,每个数据库有哪些表,每个表应该包含哪些字段,以及这些表之间的关联关系。
但是,考虑外键约束会影响数据库性能,因此本项目的数据库设计都没有添加外键约束,后面我们在做具体模块时,在具体分析相关表的关联关系。下面就是经过分析设计出的数据库E-R图。
在数据库设计完成以后,接下来我们就要搭建开发环境,为系统编码做准备了。