В рамках своей цели обучения новому навыку на работе я пытаюсь разработать систему управления сотрудниками в ASP.NET MVC (MVC 4).
Я пытаюсь следовать соглашению о выполнении всехпроверка на уровне модели (не только потому, что это то, что я прочитал, рекомендуется, но и потому, что ходят разговоры о настольном приложении, которое может использовать части модели, поэтому я хочу убедиться, что в этом приложении также применяются все ограничения!).
Моя проблема в том, что у меня есть некоторые данные о классе Person (RemainingHoliday).При создании HolidayRequest я хочу убедиться, что запрос не на большее количество дней, чем у человека осталось.
Как мне поступить?Я знаю, что могу создать свои собственные правила проверки, расширив атрибут ValidationAttribute, но как мне перейти от класса HolidayRequest к классу Person внутри?
Фрагмент модели:
public class Person
{
public string PersonID { get; set; } // this is populated with Users AD Guid
public string HolidayEntitlement { get; set; }
public virtual ICollection<HolidayRequest> Holidays { get; set; }
public int TotalEntitlement(int year = -1)
{
return this.HolidayEntitlement + this.HolidayAdjustments.Where(a => a.LeaveYear.Year == year).Sum(a => a.Adjustment);
}
public int RemainingHoliday(int year = -1)
{
return this.TotalEntitlement(year) - this.Holidays.Where(h => h.Start.Year == year).Where(h => h.Status != HolidayStatus.Rejected).Sum(h => h.Duration);
}
}
public class HolidayRequest
{
public string HolidayId { get; set; }
public DateTime Start { get; set; }
public DateTime Finish { get; set; }
public int Duration { get; set; } // This cannot be greater than Person.RemainingHoliday
}
Я был бы очень признателен за любые указатели или образцы для этого, или, возможно, я пытаюсь быть слишком идеальным, и это не может быть сделано в модели?