如何在.NET中处理重复日期(仅限日期)?
我正试图找到一种处理.NET中重复事件的好方法,特别是针对ASP.NET MVC应用程序。其思想是,用户可以创建一个事件,并指定该事件可以在特定间隔后重复发生(例如,“每两周”、“每月一次”等等) 解决这个问题的最好办法是什么?我现在的头脑风暴是有两张表:Job和RecurringJob。作业是“主”记录,具有作业描述以及用于客户的密钥,而重复作业链接回作业,并具有关于发生频率(例如,“每月一次”)以及时间跨度(例如,“每周”、“每月”)的附加信息。问题是如何确定和设置作业的下一次发生,因为这必须定期进行。我看到了两种思路:这种逻辑要么存储在数据库列中并定期更新,要么在代码中动态计算 对解决这个问题有什么想法或建议吗 编辑:这是我正在创建的一个基于订阅的web应用程序,它可以让服务企业轻松地安排他们的常见重复性工作,并跟踪他们的客户。因此,典型的做法可能是每月为史密斯先生创建一份“修剪草坪”的工作。确切的日期并不重要,关键是客户能够看到史密斯先生每月都修剪草坪,并跟进此事 让我重新表述一下,以便更好地表达我的想法。应用程序的示例用例可能如下所示:如何在.NET中处理重复日期(仅限日期)?,.net,date,scheduling,.net,Date,Scheduling,我正试图找到一种处理.NET中重复事件的好方法,特别是针对ASP.NET MVC应用程序。其思想是,用户可以创建一个事件,并指定该事件可以在特定间隔后重复发生(例如,“每两周”、“每月一次”等等) 解决这个问题的最好办法是什么?我现在的头脑风暴是有两张表:Job和RecurringJob。作业是“主”记录,具有作业描述以及用于客户的密钥,而重复作业链接回作业,并具有关于发生频率(例如,“每月一次”)以及时间跨度(例如,“每周”、“每月”)的附加信息。问题是如何确定和设置作业的下一次发生,因为这必
- 用户调出John Smith的客户记录并单击添加作业链接
- 用户填写表格,创建一个名为“割草”的作业,开始日期为2009年11月15日,并选中一个复选框,指示此作业持续进行。用户将看到一个二级屏幕,询问作业频率。用户表示(现在还没有决定如何进行-让我们假设选择列表)作业每月发生一次李>
- 用户单击保存李>
现在,当用户查看John Smith的记录时,他们可以看到他有一份工作,“割草”,从2009年11月15日开始,每月都会发生。在主仪表板上,假设开始日期前一周,用户会看到显示的作业带有一个指示器,如“12/15/2009-修剪草坪(John Smith)”。在截止日期前一周,公司有人打电话给他,告诉他他要出城到2010年1月1日,所以他希望他的约会重新安排在那个日期。我们的用户可以将作业日期更改为2010年1月1日,现在重复将从该日期起一个月开始(例如,下一次将是2010年2月1日)。其背后的想法是,该应用程序针对的是草坪护理、水管工、地毯清洁工等企业,而这些企业的确切日期并不重要(因为随着人们的忙碌,它可能也将发生变化),关键是向企业提供史密斯先生的月度服务即将推出的指标,应该有人给他打个电话,确定具体什么时候可以安排。实际上,为这些企业提供了一种跟踪重复业务的方法,并知道何时该跟进客户。将计划存储在数据库表或xml文件中是有意义的。主要是因为作业只能由asp.net应用程序计划。该事件必须由另一个应用程序触发—很可能是检查asp.net应用程序存储的配置的windows服务
至于表的结构,这实际上取决于您需要安排的具体内容——我想您真正需要的是用户id、作业id和在单个表中执行的日期。您的规则可能会有多复杂?如果你能说服那些能让事情简单化的人,你的生活就会愉快得多:)你还应该让他们在各种测试情况下签字——如果某件事情计划每月30日发生一次,那么它是否会发生在2月份?至少通过使用日期(没有时间),你应该不用担心夏令时 您可能想查看或寻找其他针对.NET的iCal(RFC2445)实现,但判断库的质量可能很棘手,因为这是一个复杂的领域,包含大量的角落案例
在数据库方面,我会动态计算,除非这证明太痛苦。显然,您还必须在某个地方使用相同的“计算出下一个事件”代码,这样就消除了定期更新的复杂性。我已经在数据库方面看到了这一点,让我告诉您,它变得非常丑陋 我建议建立一个能够处理重复事件的业务模型(即,根据业务模型进行动态计算)
至于数据库,你肯定需要存储与你的业务模型相关的数据,但是在这之上你应该考虑预测你的重复事件(可能长达一年左右),这将允许你的应用程序外部的使用能够使用你的事件。例如,如果你有一个报告系统,需要知道人们的日程安排,等等。
这是我之前考虑过的一个问题——虽然我还没有在现实世界中付诸实施,但你正在使用的要素如下:- 工作描述
- 重复模式
- 下一个预定事件
- 作业/发生历史记录