2

我正在编写一个应用程序,该应用程序需要根据一组规则限制下订单的时间。我有两个问题,将规则存储在 MSSQL 表中的最佳方式是什么,以及针对它们验证日期的最佳方式是什么?

例如。

  • 不能在 1200 到 1700 之间的任何星期六下订单。
  • 0000 到 2359 之间的任何圣诞节 (25/12) 都不能下订单
  • 不能在 2013 年 10 月 3 日的 1500 和 1600 之间下订单。

我最初的计划是让一个表有 4 列(开始时间、结束时间、单一规则/重复规则)。

但是,我不确定如何考虑星期几与年份中的日期与绝对日期。

有任何想法吗?

4

1 回答 1

2

我解决这个问题的方法是有 3 个表(一年中的一天、一周中的一天和绝对日期),它们覆盖包含每个规则的开始/结束时间的 DateConstraint。

时间匹配的实体框架图

验证码比较简单。我将 Matches() 例程添加到所有类。

public partial class DateConstraint
{
    public virtual bool Matches()
    {
        return DateTime.Now.TimeOfDay.Ticks >= StartTime.Ticks && DateTime.Now.TimeOfDay.Ticks <= EndTime.Ticks;
    }
}

public partial class DayOfWeekConstraint : DateConstraint
{
    public override bool Matches()
    {
        return base.Matches() && this.DayOfWeek == Convert.ToInt16(DateTime.Now.DayOfWeek);
    }
}

public partial class DayOfYearConstraint : DateConstraint
{
    public override bool Matches()
    {
        return base.Matches() && Date.Day == DateTime.Now.Day && Date.Month == DateTime.Now.Month;
    }
}

public partial class AbsoluteDateConstraint : DateConstraint
{
    public override bool Matches()
    {

        return base.Matches() && Date.Day == DateTime.Now.Day && Date.Month == DateTime.Now.Month && Date.Year == DateTime.Now.Year;
    }
}

要进行验证,我只需要做

foreach(var dateConstraint in Restaurant.DateConstraints)
{
   if(!dateConstraint.Matches()) { return false; }
}
于 2013-03-06T22:38:34.727 回答