5

たとえば、1週間の期間を取り、それを数日に分割してから、さらに時間、30分、15分などに分割する必要があります。

次に、それらの期間に(場合によっては複数の)人を割り当てることができるようにしたいと思います。

例えば

2012年5月30日

0700:0730-アリス、ボブ

0730:0800-アリス

....:...。

1930年:2000年-アリス

2012年5月31日

0700:0730-キャロル

0730:0800-キャロル

....:...。

1930年:2000年-キャロル

毎日の開始時刻と終了時刻をカスタマイズできる場合。

勤務期間を並べ替えてクエリを実行し、担当者がいないかどうかを確認する必要があります。1日または1週間にわたって、x時間以上に誰も割り当てられていないことを確認します。

.NetにはTimeSpanとDateTimeがあることは知っていますが、これらを使用するのは面倒なようですが、一部のデータの単純な表現のように見え、TimeSpanにはStartTimeがなく、純粋に時間の範囲(30分、5分、1時間など)です。 )。

私が最初に考えていたのは、WorkingDayというクラスを作成することでした。WorkingDayには多数のWorkingPeriodを含めることができます。WorkingPeriodには、StartTimeとEndTime、およびAddPersonとRemovePersonへの簡単なメソッドを使用してそのWorkingPeriodに割り当てられたユーザーのリストがあります。

WorkingDayには、WorkingPeriodsを実行し、任意の期間に割り当てられているすべての一意の人を引き出すことによって、その日に割り当てられている人のリストを取得する機能があります。また、誰も割り当てられていないすべてのWorkingPeriodを引き出す機能もあります。

しかし、これはあまりにも面倒なようです!特に、WorkingDaysを取り、誰かが複数日にわたって割り当てられた合計時間がx時間未満であることを確認する何か他のものが必要になるためなど。

このための良い構造のための提案はありますか?彼らは私が見逃しているこれを提供する既存の.Net構造ですか?

4

1 に答える 1

10

タイムスロットの最も直接的な(そしてコンパクトな)表現はですDateTime start, TimeSpan duration

これは、クエリには適していますが、セットアップと検証にはあまり適していません(オーバーラップなどに対して)。

次のオプションは、毎日(または週)を固定数の期間に分割し、それらの期間を1回定義し、各タイムスロットをとしてコーディングすることDateTime base, int PeriodIdです。空や重複を見つけるのに適しています。

于 2012-05-30T12:34:29.873 に答える