本文主要是介绍曾经参与的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首页任务设计回顾的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!