![]() |
1
2
这是我之前考虑过的一个问题——虽然我没有在现实世界中付诸实践,但您所使用的元素如下:
到目前为止,很容易。这些是存储在数据库中的东西,这意味着根据给定的日期计算“下一个”日期,并且在业务逻辑中存在定期模式。 为客户提供的关键信息 一般来说 只要正确维护(当您将当前事件标记为“已完成”时创建一个新事件),下一次计划发生的列表是否有效。不幸的是,为了计划的目的,您可能需要能够显示接下来的几个事件,这是事情变得有趣的点(-:两种选择:即时计算(我认为这可能更好,尤其是在一些智能的“缓存”)或预计算(总体负载较低,但要管理和保存的数据较多)。t最新版本更为复杂(除了考虑到创建日程条目的进度还有多远之外)。 所以-回答你的问题-为什么我认为在飞行中更好?基本上是因为 只有 “固定”点是下一个计划的事件,您将希望根据日志的当前值(ish)计算日志,如果日志发生更改,则需要重新计算。您可以创造性地保留为特定工作缓存的下一个日期的列表,以根据需要帮助提高性能,但在真正持久的存储方面,您只对下一个日期感兴趣。 最后的几点想法——首先,如果发生的日期改变了(如你所问的),下一个日期有两个选择,要么a)不管改变(甚至取消——又是另一个挑战),继续原计划。当前事件或b)实际完成的时间表,即,对于某些事情,我们希望它们在某一天每隔n周发生一次,但可能需要不时地来回摆动日期,而对于其他事情,我们希望它们在上一次完成后4周发生。其次,正如jon所提示的,您应该查看iCal,不一定是为了实现,但一定要帮助理解哪些元素可能构成日历条目和重复模式。 |
![]() |
2
2
你的规则可能有多复杂?如果你能说服那些能让事情简单化的力量,你的生活将会更加愉快:)你也应该让他们在各种测试情况下签字——如果某件事情计划在30号每月发生一次,那它是否应该在2月发生?至少通过使用日期(没有时间),你应该不用担心夏令时… 你可能想看看 DDay.iCal 或者为.NET寻找其他的iCal(RFC2445)实现——但是判断库的质量可能很难,因为它是一个复杂的领域,有大量的角落案例。 在数据库方面,我会即时计算它,除非这证明太痛苦。很明显,您必须在某个地方保留相同的“解决下一次出现的问题”代码,它消除了定期更新的复杂性。 |
![]() |
3
0
将计划存储在数据库表或XML文件中是有意义的。主要是因为作业只能由ASP.NET应用程序调度。事件必须由另一个应用程序触发-很可能是检查ASP.NET应用程序存储的配置的Windows服务。 至于表的结构,它真正取决于您具体需要调度什么——我想您真正需要的只是在单个表中执行的用户ID、作业ID和日期。 |
![]() |
4
0
我在数据库方面看到了这一点,让我告诉你 真的? 丑陋。 我建议使用某种类型的业务模型来处理重复事件的想法(即从业务模型中即时计算)。 就数据库而言,您肯定需要存储与业务模型相关的数据,但除此之外,您还应该考虑 预测 您的定期事件(可能长达一年左右),这将允许应用程序外部的使用能够使用您的事件。例如,如果您有一个报告系统,需要知道人们的日程安排等。 |