如果您的任务是构建支持重复事件的事件调度系统,您将如何做?如何删除定期活动时的处理方式?你怎么能看到未来事件何时发生?
即在创建活动时,您可以选择"每日重复"(或每周,每年等).
请回复一个设计.我已经习惯了Ruby/Rails,但是使用你想表达设计的任何东西.
我在接受采访时被问到这个问题,并且无法提出我喜欢的非常好的回复.
注意:这里已经被问到/已经回答了.但我希望得到一些更实用的细节,详情如下:
Gre*_*gle 10
我开始实现Martin Fowler概述的一些时态表达.这样可以确定计划项目何时应该实际发生.这是一种非常优雅的方式.我最终得到的只是文章中的内容.
下一个问题是弄清楚世界上如何存储表达式.另一个问题是当你读出表达式时,那些如何适应不那么动态的用户界面?有人谈到将表达式序列化为BLOB,但是很难走出表达式树以了解它的含义.
解决方案(在我的例子中)是存储适合用户界面将支持的有限数量的情况的参数,并从那里使用该信息动态生成时间表达式(可以在创建时进行序列化以进行优化).因此,Schedule类最终会有几个参数,如偏移量,开始日期,结束日期,星期几等......然后您可以生成Temporal表达式来完成艰苦的工作.
至于具有任务的实例,有一个"服务"可以生成N天的任务.由于这是与现有系统的集成,并且需要所有实例,因此这是有道理的.但是,像这样的API可以很容易地用于投影重复,而不存储所有实例.
保存事件时,我会将时间表保存到商店(我们称之为“时间表”,我会计算下一次事件触发的时间并将其保存,例如在“事件”中。然后我会查看“事件”并找出下一个事件发生的时间,然后睡觉直到那时。
当应用程序“唤醒”时,它会计算事件应该再次发生的时间,再次将其存储在“事件”中,然后执行事件。
重复。
如果在睡眠时创建事件,则睡眠将被中断并重新计算。
如果应用程序正在启动或从睡眠事件或类似事件中恢复,请检查“事件”以获取已传递的事件并采取相应的操作(取决于您要如何处理错过的事件)。
这样的事情会很灵活,不会占用不必要的 CPU 周期。
| 归档时间: |
|
| 查看次数: |
17308 次 |
| 最近记录: |