このエンティティをモデル化する最善の方法を見つけようとしていますが、行き詰っています。基本的なユースケース/ストーリーは次のとおりです。
機材が現場に到着。どんな機材かは、届くまでわかりません。機器が現場に到着したら、到着したこと、およびアイドル状態かアクティブ状態かを記録する必要があります。アクティブな場合、ユーザーは機器が実行した作業を記録する必要があります。機器がサイトを離れるときは、これに注意する必要があります。
サイトに機器があるかどうか、以前にサイトにあった機器などを簡単に照会できる必要があります。
私は日付の面で立ち往生しています。特定の日にアイドル状態とマークされていない場合、cronジョブを実行して機器をアイドル状態としてマークすることに頼らないようにしています。これを行う方法が必要なように感じます。これが私が思いついたものです:
public class Equipment {
public int Id { get; set; }
public Site Site { get; set; }
public DateTime Arrival { get; set; }
public DateTime Departure { get; set; }
public IList<EquipmentUtilization> EquipmentUtilizations { get; set; }
}
public class EquipmentUtilization {
public int Id { get; set; }
public Equipment Equipment { get; set; }
public DateTime ReportDate { get; set; }
public string WorkPerformed { get; set; }
}
アイデアは、Site.Equipment.Where(x=>x.Departure == null)
どの機器がまだ現場にあるかを確認するようなクエリを実行できるということです。特定の日付に EquipmentUtilization がない場合は、アイドル状態であると見なされます。次に、DateTimeEnumerator をセットアップできます。
public class DateTimeEnumerator : System.Collections.IEnumerable
{
private DateTime begin;
private DateTime end;
public DateTimeEnumerator ( DateTime begin , DateTime end )
{
this.begin = begin;
this.end = end;
}
public System.Collections.IEnumerator GetEnumerator()
{
for(DateTime date = begin; date < end; date = date.AddDays(1))
{
yield return date;
}
}
}
到着日から DateTime.Now または DepatureDate (null でない場合) までの日付のリストを作成します。何らかの理由で、これは醜いようです。DateTime 列挙子を Equipment オブジェクトの内部に配置する必要がありますか? これはすべて一緒にするか、別の方法で行う必要があるように感じますが、実行すると機能します。提案?