动吧项目日志模块12

用户行为日志管理

日志业务分析及设计

背景分析

在实际项目中,用户操作软件的过程,通常会以日志记录。例如记录用户在什么时间点,执行了什么操作,访问了什么方法,传递了什么参数,执行时长是多少等这些信息要存储到数据库。

业务表的分析及设计

对于用户行为日志表的设计如下:
在这里插入图片描述

日志业务原型设计

日志业务核心API设计

日志模块业务核心API设计,如图所示:
在这里插入图片描述
SysLog (封装用户行为日志)
SysLogDao(执行日志数据逻辑)
SysLogService&SysLogServiceImpl (执行日志业务逻辑操作)
SysLogController(执行日志的请求、响应控制逻辑操作)

用户行为日志查询并呈现

业务分析与设计业务分析

将用户行为日志从数据库查询出来以后,以统一的JSON格式,将数据响应给客户端

业务数据架构设计

用户日志行为数据查询时,其数据封装及传递架构如下:
在这里插入图片描述

业务操作访问时序设计

基于业务描述,进行API访问时序设计,如图所示
s

页面加载时序设计

第一步:用户点击首页日志管理菜单时向服务端发送异步加载请求
第二步:服务端通过PageController中的方法处理日志页面加载请求
第三步:在日志列表页面加载完成以后,向服务端发起异步数据加载

请求数据访问时序设计

第一步:用户向服务端发送数据查询请求(默认先查询第一页数据)http://localhost/log/doFindPageObjects?pageCurrent=1
第二步:服务端调用SysLogController的doFindPageObjects方法处理查询请求并将响应结果封装到JsonResult,然后响应到客户端。
第三步:在SysLogController的doFindPageObjects方法内部调用SysLogService对象的findPageObjects方法执行分页查询逻辑,并将查询结果封装到PageObject对象,然后返回给控制层。
第四步:在SysLogServiceImpl的findPageObjects方法内部调用SysLogDao的getRowCount方法,findPageObjects方法获取用户日志总记录数以及当前页要呈现的记录。

服务端代码设计及实现

POJO类设计及实现设计

SysLog对象,通过此对象封装查询到用户日志行为信息,关键代码如下
在这里插入图片描述

DAO 接口设计及实现

设计SysLogDao,并通过此类型的对象实现分页数据查询逻辑。
第一步:创建SysLogDao接口,关键代码如下:
package com.cy.pj.sys.dao;
@Mapper
public interface SysLogDao{}
第二步:在SysLogDao接口中添加查询日志日志总记录数的方法,关键代码如下:
在这里插入图片描述
第三步:在SysLogDao接口中添加当前页日志记录的方法,关键代码如下
在这里插入图片描述
第四步:定义SysLogDao中方法对应的SQL映射
在mappers/sys目录中创建SysLogMapper.xml文件,并在文件中定义SQL映射,关键代码如下:
在这里插入图片描述

Service对象设计和实现

基于查询条件获取用户日志行为信息并进行计算和封装
第一步:定义SysLogService接口并添加日志查询方法,关键代码如下:
在这里插入图片描述
第二步:定义SysLogService接口实现类并重写分页查询方法
在这里插入图片描述

Controller 类设计及实现

创建SysLogController类型,通过此类型的对象处理客户端日志请求。
第一步:创建SysLogController类型类型,关键代码如下
在这里插入图片描述
第二步:在SysLogController类中添加处理日志查询请求的方法,关键代码如下:
在这里插入图片描述

客户端代码设计及实现

Starter页面事件处理
第一步: 定义响应请求页面的方法
在PageController类中,添加响应模块页面请求的方法,关键代码如下
在这里插入图片描述
第二步:首页页面日志管理事件注册
starter.html页面加载完成以后,进行click事件注册,并基于请求的url加载页面资源,然后将响应页面呈现在浏览器中。
在这里插入图片描述
日志列表页面事件处理
第一步:在PageController中定义响应分页页面方法,关键代码如下:
@GetMapping(“doPageUI”)public String doPageUI(){ return “common/page”;}
第二步:日志列表页面加载完成定义执行分页页面加载,关键代码如下
$(function(){ $("#pageId").load(“doPageUI”);})
第三步:日志分页页面加载完成以后异步加载服务端数据并进行呈现
修改分页页面加载的JS代码逻辑,关键代码如下:
$(function(){ $("#pageId").load(“doPageUI”,doGetObjects);})
定义异步加载日志信息的doGetObjects方法,关键代码如下:
在这里插入图片描述
将当前页记录呈现在页面上,关键代码如下
在这里插入图片描述
定义处理错误信息的doSetTableBodyErrors方法,关键代码如下:
在这里插入图片描述
迭代记录并将其追加到tbody中,关键代码如下
在这里插入图片描述
基于每条记录进行"行渲染
在这里插入图片描述

Page 页面事件处理

第一步:定义初始化分页数据的方法,关键代码如下:
在这里插入图片描述
第二步:在日志列表页面中的处理查询结果的方法内部,调用doSetPagination方法
在这里插入图片描述
第三步:注册并处理分页点击事件,关键代码如下:
在这里插入图片描述
在这里插入图片描述
第四步:修改列表页面的doGetObjects方法内部参数的定义
let pageCurrent=$("#pageId").data(“pageCurrent”);
if(!pageCurrent)pageCurrent=1;
let params={pageCurrent:pageCurrent};//暂时默认指定页码值为1

列表页面查询按钮事件处理

第一步:查询按钮事件注册
日志列表"页面加载完成"以后,添加查询按钮事件注册操作,关键代码如下:
$(".input-group-btn").on(“click”,".btn-search",doQueryObjects);
定义查询按钮事件处理函数
在这里插入图片描述
第二步:修改列表页面doGetObjects方法中的参数定义
在这里插入图片描述

章节总结(Summary)

重难点分析

日志表的设计(记住有哪些字段)核心API的设计(SysLog,SysLogDao,SysLogService,SysLogController)
日志数据查询结果的封装和传递(SysLog,PageObject,JsonResult)
项目中统一异常处理类的设计(GlobalExceptionHandler)
客户端向服务端传递的参数设计(username,pageCurrent)

FAQ 分析

日志查询是如何分页的?(每次只查询指定页码对应的数据)
日志查询结果是如何封装和传递的?
服务端的业务参数校验,业务结果的校验异常是如何处理的?(抛出)
控制层响应结果转换为JSON字符串的过程是怎样的?(@ResponseBody)
数据呈现过程中用到什么技术?(html,css,js,jquery,bootstrap,adminlte)
你用到了Jquery中的哪些函数?(ajax,prop,data,html,empty,…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值