我一直在试图找出建模这个实体的最佳方法,但我陷入了困境。这是基本用例/故事:
我们有设备到达现场。在它到达之前,我们不会知道设备是什么。一旦设备到达现场,它必须被记录为已经到达以及它是空闲的还是活动的。如果它处于活动状态,用户必须记下设备执行的工作。当设备离开现场时,必须注意这一点。
应该可以很方便的查询到现场有没有设备,以前现场有什么设备等等。
我被困在日期方面。如果设备在特定日期没有被标记为空闲,我试图避免依赖 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 的日期列表(如果不为空)。出于某种原因,这看起来很丑陋。我应该将 DateTime 枚举器放在 Equipment 对象中吗?感觉这应该全部放在一起或以某种不同的方式完成,尽管如果我运行它确实有效。建议?