当前课程知识点:软件开发实训--动态网站开发 > 4 功能设计 > 4.1用户管理功能设计 > 4.1.1用户管理功能设计
同学你好
欢迎回到软件开发实训课堂
前面咱们已经把
前后台需要的接口做了一个设计
那么从这节课开始
咱们具体来看一看
后台都需要哪些功能需要设计
这节课咱们就说一说用户管理功能的设计
对于现代每一个网站
或者是软件系统都会有用户来使用它
那么用户是每一个软件或者网站
必备的一个功能
所以我们首先来说明用户管理
对于网站来讲用户比较单一
通常情况下就是系统管理员和内容管理者
那么它的用户虽然比较简洁比较少
但我们需要一个
用户的管理功能来管理
我们的内容管理者和系统管理员
比如说对它进行密码的修改
或者对它的手机号码
电子邮件等基本信息的修改
这些个都需要我们来实现
虽然说它的用户比较少
可是我们的功能一个都不能少
那么具体的我们有哪些信息呢
我们来看一下
对于用户来讲
对于网站的用户来讲
通常我们有一个管理员
就可以完成这些内容了
那么我们有时候为了更好的去管理网站的内容
把系统管理员和内容管理员给它分开
这样使得我们系统能更好的去扩展
比如说我可能需要加入产品
专门的用户来进行产品的管理
所以用户管理功能就包括了用户的查询添加
等等这些功能
当然了
某个管理员我不想要了
我可以把它删掉
如果你不想删除这些信息
那就需要给它加一个什么失效功能
不让它登陆
这就是什么
不删除
但有一个你需要注意
系统管理员
通常我们叫admin
或者
administrator这根据你的设计来定
这里边我们把它叫做admin
这里边你要注意的是
这个用户是不能删除也不可失效的
只能修改密码
如果这个用户要删除了
或者失效了
那么整个系统你很多配置信息
甚至就无法使用了
所以坚决不允许删除或失效系统管理员用户
所有的用户应该能够去修改它自己的密码
这是你必须要实现的
再来看一下
对于我们后台
你需要把所有的界面的布局来设定一下
这样你就能观察到所有的功能
添加用户
很明确
有了这个界面布局后
删除编辑失效
这些个你都能够展现出来了
当然了你也可以有一个刷新这样的功能
这根据你的需要来定
然后列出了所有的用户信息
还有我们可以通过前面的复选框来多选
进行相关的多用户操作
这个时候实际上对于用户来讲
多个操作往往只是删除和失效
而编辑这块我们讲通常情况下
一次只能编辑一个用户的信息
所以你要注意对它进行处理
另外一个我们下面还有一些提示的信息
天下用户无需选择编辑不能多选
这是什么意思
就是我们这个列表里面
当我们点击添加用户时
这个列表中不需要选择任何信息
相反
当我们点击编辑功能时
你必须要至少有一个也至多只能有一个
把它打上勾选中信息才能进行编辑
在一个这里有弹出窗口的操作
这个倒不是必须要这样去做
根据你的设计
如果信息量比较大
你可以单独地出现一个窗口来实现
如果信息量比较小
你就可以单独的弹出一个小窗口
来实现这样的操作
那么对于用户修改密码的功能
你需要把它单独的提供出来
每一个用户登录后可以对它的密码进行修改
如果你没有提供密码找回功能
那么你需要让用户能够怎么样呢
在忘记密码时找回
那么怎么办
就需要给管理员提供一个重置密码的功能
因为我们用户量比较小
所以它可以让管理员给它重置密码
这样的话我们就将通过界面布局
把所有的用户功能展现出来了
而在密码修改的界面里
通常情况下我们提供了一个
密码和确认密码这两个框
当然为了更加安全起见
最好还是让它先输入原来的密码
再进行修新密码的修改
这也是防止当你打开了界面
人又不在跟前时
别人直接可以通过修改密码功能
把你的密码给修改掉
如果要求输入旧的密码
然后再去修改的时候
就可以避免这样的问题发生
所以这个可以根据你的需要
来进行相关的设计和处理
那么有了界面
我们就可以设计相关的类来实现界面的融合
首先我们是要应用Spring boot
Spring JPA
以及SpringMVC这样的相关框架和技术
来实现整体的开发
所以我们首先要设计的就是实体类
也就是说我们用户都有哪些信息
通过这些信息来构成了一个实体
首先是对类名的约定
User
User所对应的表名是users
加了一个s并且把字母都小写了
然后我们在类里边定义了所有的私有数据
并且提供了getter和setter方法
get和set方法
是javab中的
标准的信息访问方式
我们把所有的信息私有化以后
对于其它的类是无法来访问当前类的
这个时候怎么办呢
我们能够通过提供get读取的方法来让它
获取信息
set方法
这样的写方法来向我们的信息提供数据
这个的话就是javab里边它的一个标准形式
get和set
当然一个数据只是只读的时候
我们只提供get只写的时候
只需要提供一个set方法就可以了
那么为了提供对象之间的比较
尤其在我们持久化操作中
什么是持久化
就是我把这个对象的数据全部的
永久的保存起来
这就是持久化
那么持久化我们需要操作时
比如说我要去修改它
或者删除它等等
这个需要我们进行数据的比对
看看它两个数据是不是同一个实体的数据
所以我们要实现hashCode的方法以及equals方法
那么这两个方法可以很容易地实现
唯一确定一个对象以及两个对象之间的比较
当然了
为了能够更好地输出我们的信息
一个实体信息
我想把它打印出来
这个时候我们可以提供一个toString方法
toString方法
它就是把我们的实体对象转换成了字符串形式
然后可以把它怎么样
输出来
这就是有关优则的实体类的相关设计
那么有了实体类以后
我们就需要去对它进行访问
我们是面向对象的操作
所以不涉及任何数据库的直接操作
而是由相关的spring jpa这样的框架
进行数据库的操作封装
然后对我们的实体进行操作
我们操作一个实体时
就相当于是在操作一个表
一行数据
那么怎么来实现
对于Jpa来讲
我们要设计DAO也就是数据访问对象
它的数据访问对象设计比较简单
我们定义一个UserRepository的
这样的接口
这个接口我们需要让它去
继承JPA的数据访问接口
那就是JPA Repository
要注意
JPA接口它需要两个泛型
类型
第一个是User
第二个是Longer
很明显
第一个User是指明当前的数据访问对象
访问的实体是哪一个
那么Longer就表示了它的标识用的什么类型
那么这个标识
就是唯一的确定了一个实体的对象
这和我们数据库中的主见一一对应
这是有关用户管理对于数据访问对象的一个
设计说明
那么对于jpa来讲的话
我们只要继承了JPA repository
这个接口
就已经实现了对实体对象的增删改查的功能
所以它还是比较简单的
那么有了DAO的设计
我们还需要提供其它的方法
虽然它已经提供了增删改查
可是我们还需要其它的几个有关关键字搜索
密码搜索
这样的方法我们来看一下
第一个
修改密码
修改密码
我们要单独的去设计一个方法
这里边我们用modifyPassword
作为它的名称
那么这个方法的设计的时候
你要注意
它要单独的使用注解carry来实现
对密码的修改
当然我们也可以怎么样
用另外一种方式
那么另外一种方式就是我在修改密码的时候
我只需要把原来的实体查询出来
再把密码修改掉
再给它保存回去
这也是没有问题的
所以这两种方式都可以选择
都是没有问题的
另外一种是模糊查询
Keyword
ByKeyword这个方法
它给出了一个关键字
通过关键字然后查询相关的用户信息
而且还可以进行分页
在jpa的查询里边
需要注意的是
只要你传递了Pageable
它就能够自动给你分页
按照Pageable提供的信息来进行分页
这是JPA已经封装好的地方
那么对其它的增删改查的方法就可以
完全的使用它的默认形式就可以了
那么通常情况下
我们设计了DAO以后就已经可以
实现我们的数据访问了
但是我们还需要去做一个接口
那就是服务接口
服务接口的作用是与Springmvc
进行交互的一个接口
它把Springmvc的对数据的访问与数据库访问
DAO进行了一个桥接
我们把所有的处理都放在服务中
来进行处理
我们来看一下Userservice
用户服务接口
这个接口对应有一个实现类
这两个都是我们自定义的接口和类
你要注意为什么我们要这么去做呢
Spring它在管理所有的Bin的时候
它对接口的应用非常的广泛
比如说它的典型的面向切面的AOP技术
它使用的就是接口
所以我们把所有的服务
DIO都用接口来实现
有利于我们在后期对它进行扩展
那么在服务里边
我们给出了基本的增删改查这样的操作
那么这些方法的在实现的时候
你需要调用的是JPA对应的相关的方法
如果我们出现了事务处理
你要注意在spring boot里边
SpringMVC以及Spring这样的框架里
你只需要简单地用注解实现事务处理就可以了
以保证我们数据的完整性
比如说我们同时存储好多个实体
或者同时删除多个实体的时候
你就要事务处理
那么我们把事务处理就放在服务层就可以了
那么为什么不放在DIO层呢
通常按照面向对象这样的设计思路
DIO层它往往在存储的时候
都是单个实体的存储
或者删除的时候也只是对单个实体的删除
当然了也可以实现多个
比如说删除jpa就提供了
多个删除这样的方法
那么对于更新和插入操作
DIO里面并没有提供一个
存多个实体的相关方法
它只能一个一个存
所以这个时候我们要想进行事务处理的话
就得把它放在service
因此还是建议
把所有的事务处理都放在Service里就可以了
那么有了Service这样的接口
我们就可以去实现对数据的进行访问了
那么在SpringMVC这一端
它要去访问数据库的数据
需要通过Service来实现
而调用Service的
是采用SpringMVC的控制器
对于控制器
我们给出了UserController这样一个类
你需要用注解去注明它是一个控制器
那么对于控制器来讲
它也包括了几个基本的方法
一个是save
当我要添加一个用户或者是编辑一个用户时
这个时候通过界面传递过来的数据
由controller接收
接收到以后
由save方法把它传递给服务
再去进行保存
而list的方法是
需要对所有的信息进行列表操作
所以它执行的是一个查询操作
那么提供的首先是一个关键字
key word
Pageable说明我们还需要一个翻页
有了这些
我们能够进行模糊查询
然后把它以列表的形式展示出来
这就是list的作用
同样的delete和delete All
这两个方法都是删除
delete只是删除一条信息
而delete All是删除多条信息
而删除的信息是由list对象给出的
好
这些方法它们最终返回到list的页面
这个要注意
看一下
还有一个方法叫findById这个是我们去修改
一个用户信息时
先要把它查出来
然后进行修改
所以我们需要一个findById这是一个
第二个当用户进行登录时
它还需要进行查询
那么它查询出来以后
这个时候也需要通过findById
或者findByaccount这样的方法去查询它
另外我们说修改密码
当用户需要改密码时
可以在界面提交一个修改密码的表单
然后通过我们的modify Password的方法来去修改
它的密码
那么修改完成后
这个方法它返回到修改密码页面
这个要注意
这个是我们对于用户的控制器的一个介绍
好
有关用户管理的相关功能就介绍到这里
下去以后一定要把它写成一个文档
放到你的设计文档中去
那么你要注意
在写文档的过程中
也是你对整个系统的熟悉过程
而且你也会考虑到是否遗漏了什么
你写的越多越详细
你会发现你考虑的越多越全面
所以一定要勤奋动手
把这些东西形成文档
好了
这节课就讲到这里
下节课咱们再见
-1.1课程介绍
--1.1.3随堂测试
-1.2网站需求分析
--1.2.4随堂测试
-1.3网站首页分析
--1.3.3随堂测试
-1.4导航菜单分析
--1.4.3随堂测试
-1.5内容区域分析
--1.5.3随堂测试
-1.6内容副页面分析
-1.7编写需求文档
-2.1后端页面总体分析
--2.1.3随堂测试
-2.2用户管理功能设计
--2.2.3随堂测试
-2.3内容与分类功能分析
--2.3.3随堂测试
-2.4网站配置功能设计
--2.4.4随堂测试
-2.5数据库及表结构分析
-总体设计文档
-3.1前台模板约定
--3.1.3随堂测试
-3.2网站配置接口设计
--3.2.3随堂测试
-3.3菜单接口设计
--3.3.3随堂测试
-3.4内容接口设计
--3.4.3随堂测试
-3.5幻灯片接口设计
--3.5.3随堂测试
-补充设计文档
-4.1用户管理功能设计
--4.1.3随堂测试
-4.2菜单管理功能设计
--4.2.3随堂测试
-4.3内容管理功能设计
--4.3.3随堂测试
-4.4网站配置信息设计
--4.4.3随堂测试
-完成设计文档
-4.6随堂测试
-5.1开发环境搭建
--5.1.2随堂测试
-5.2Web前端环境搭建
-5.3创建用户实体
--5.3.2随堂测试
-5.4用户实体表创建与初始化
--5.4.2随堂测试
-5.5用户数据访问接口实现
--5.5.2随堂测试
-5.6环境搭建问题
-6.1用户服务层接口实现
--6.1.2随堂测试
-6.2用户列表和编辑控制器实现
--6.2.2随堂测试
-6.3用户存储和删除控制器实现
-6.4用户添加、编辑界面实现
-6.5用户管理添加用户调试
-7.1用户查询模板实现
--7.1.2随堂测试
-7.2用户信息编辑的实现
-7.3单个用户删除实现
-7.4多个用户删除实现
-8.1用户列表分页基本实现
-8.2用户列表查询结果分页实现
-8.3通用日期处理
-8.4整型日期处理
--8.4.2随堂测试
-8.5枚举数据的应用
-9.1登录逻辑实现
--9.1.2随堂测试
-9.2登录界面及流程调试
--9.2.2随堂测试
-9.3管理主界面实现
--9.3.2随堂测试
-9.4授权验证拦截器实现
--9.4.2随堂测试
-9.5拦截器调试
-10.1分类接口实现
-10.2分类添加、编辑实现
-10.3分类树结构实现
-10.4分类删除实现
--10.4.2随堂测试
-11.1内容实体定义
-11.2相关接口定义
-11.3服务接口实现
-11.4内容添加、编辑模板实现
-11.5内容添加、编辑控制器实现
-11.6内容检索页面实现
-11.7内容分类树实现
-12.1修改UEditor相关问题
-12.2整合UEditor到内容编辑界面
-12.3UEditor图片对话框应用
-12.4文件上传问题处理
-13.1网站配置相关类实现
-13.2网站配置界面模板实现
-13.3网站配置调试
-14.1网站首页布局实现
-14.2菜单Vue组件实现
--14.2.2随堂测试
-14.3幻灯片Vue组件实现
-14.4滚动Vue组件实现
--14.4.2随堂测试
-14.5滚动接口实现
-14.6滚动接口调试
-14.7幻灯片接口实现
-15.1首页区域实现
-15.2首页内容脚本实现
-15.3首页完善
-15.4Vue组件放入单文件
-15.5详细页面实现
-16.1网站测试介绍
-16.2功能测试
-16.3打包发布
-16.4部署运行
--16.4.2随堂测试