2

一連のルールに基づいて注文が行われる時間を制限する必要があるアプリケーションを作成しています。2つの質問があります。MSSQLテーブルにルールを格納するための最良の方法と、それらに対して日付を検証するための最良の方法は何ですか?

例えば。

  • 1200〜1700の土曜日は注文できません。
  • 0000〜2359のクリスマスの日(25/12)はご注文いただけません。
  • 2013年10月3日の1500〜1600の注文はできません。

私の当初の計画では、テーブルに4つの列(開始時刻、終了時刻、単一のルール/繰り返しルール)を含めることでした。

しかし、曜日と年の日付と絶対日付をどのように考慮するかはわかりません。

何か案は?

4

1 に答える 1

2

この問題を解決する方法は、各ルールの開始/終了時刻を含む DateConstraint をオーバーライドする 3 つのテーブル (年間通算日、曜日、および絶対日付) を用意することでした。

時刻合わせのエンティティ フレームワーク図

検証コードは比較的単純でした。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 に答える