曾经参与的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

相关文章

一文详解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实

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删