曾经参与的web首页任务设计回顾

2024-06-12 23:32

本文主要是介绍曾经参与的web首页任务设计回顾,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景描述:党建平台首页要新增一个任务展示功能,用于提醒一些业务的待办事项

整体思路:待办事项做一张表查询展示,初始化任务,然后监控各业务数据库变化,再统筹调用抽象任务检查方法更新卡片。问题在于一是如何初始化这些任务,二是业务发生变化后如何更新对应的任务

1)任务注册表

记录任务相关的业务信息,比如关联的表,和一些规则信息,比如这个业务的任务要在哪些组织,哪些范围生成。通过脚本在各个环境初始化

2)生成任务

根据任务注册表信息初始化任务,任务有年度任务,季度任务,月度任务等,不管是什么类型,全都一次生成。通过job完成,这样可以灵活处理,如果需要重新生成任务,可以执行下这个Job

3)任务初始化

任务状态初始化Initializer,初始化任务状态,通过job完成

4)各业务实现

各业务实现业务任务处理类接口,完成自己的逻辑

比如我的一个

5)统筹各业务实现

通过定义任务相关工具器,处理不同的事情

任务寻找器,寻找某一个任务

任务完成器,完成某一个任务

5)监控数据库变化根据表找到对应任务handler更新任务

 拿到update的数据库和表,找到任务

调用抽象handler

根据对应className找到对应handler

通过Aop获取实现类

调用对应handler查出满足条件的task

调用complete完成任务

思考:

1.做这块需求出现过什么问题

前期

在做的过程中,会有一些低级问题,比如任务信息错误,这其实是不应该的。后面出现业务变化了,任务不更新,是因为handler中写反了逻辑

后期

业务表发生变化要更换debezium监控,各环境都要同步,测试环境有时没有同步导致bug

任务维度发生变化,要重新初始化待办任务

一般用什么机制,在机制的各个节点可能都会出问题。

2.这种实现是推式还是拉式,推式是指主动生成,拉式是指相关方被动拉取

个人认为这要从哪个角度看,如果是站在后台的角度,是推式,主动生成并变更;站在用户的角度是拉式,被动拉取。

3.面向接口编程,需要获取所有接口,如何处理

Spring框架下,通过ApplicationContext上下文,调用getBeansOfType获取所有声明的Bean,比如这里

 要求所有实现都是Bean对象

4.如何更新某个组织的某个任务

更新信息中有表名,根据任务注册表能对应具体业务的handler;更新信息中也有组织编号,获取组织编号后更新这个组织的这个任务信息。

这是统一的方法

给我的启发:

对于这种预警,待办事项,提醒类的功能,一般涉及数据的变化,比如预警有状态,随着业务变化而变化,待办事项完成未完成,随着业务变化而变化。

如果让自己来设计,首先分析需求,搞清楚数据来源,也就是和业务的关系在,再做设计,这不管是什么需求都应如此,只有把数据来源搞清楚了,才可能直到数据应该怎么走。设计的话参考这种思路,首先任务要预先生成,而不是说在业务中触发生成,业务中应该是触发变化。再看需求吧,是否需要强变化,就是业务变化了,提醒或事项马上变化,如果是像这里,没有这么强的强变化要求,页面上可以不做定时刷新,可以是一个由用户来触发的动作。

是否需要做成一个单独的服务,我觉得可以吧,微服务架构,每个服务应该职责分明,高内聚,低耦合。

这篇关于曾经参与的web首页任务设计回顾的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055654

相关文章

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实