在具有Entity Framework 4的MVC应用程序中,我正在尝试向Schedule
模型添加更多代码。现在,从代码中调用此模型上的方法以获取不在周末的日期列表。以这种方式从控制器调用模型var freeDates = Schedule.GetDatesNextThirtyDays()
。
要执行上述操作,不需要进行数据库调用。我想添加一个方法来检查日期是否为“结构自由日”(每年免费)。此方法需要进行数据库调用,因为自由天数将存储在由StructuralFreeDay
组成的string DayMonth
模型中(也许我将使用DateTime并忽略年份部分,必须注意闰年 - 这是另一个问题)和string Reason
。
// get a list of dates (within the next 30 days) that are eligible for duty
public static ICollection<DateTime> GetDatesNextThirtyDays()
{
ICollection<DateTime> plannableDates = new List<DateTime>();
var date = DateTime.Today;
for (var i = 0; i < 29; i++)
{
if (!IsWeekend(date) && !IsStructuralFreeDay(date)) // <= The new method.
{
plannableDates.Add(date);
}
date = date.AddDays(1);
}
return plannableDates;
}
// return true if day is not saturday, sunday
public static bool IsWeekend(DateTime day)
{
return day.Date.DayOfWeek == DayOfWeek.Saturday || day.Date.DayOfWeek ==
DayOfWeek.Sunday;
}
我更喜欢在bool IsStructuralFreeDate
方法中使用数据库调用添加新方法GetDatesNextThirtyDays
,因为这是使用它的地方。是否可以实例化DbContext
并在模型中调用数据库?还是有更优雅的解决方案?
答案 0 :(得分:1)
很棒的问题user2609980(伟大的名字也;))。与任何这样的元问题一样,它取决于您的环境,时间表和内部标准,因为它与任何假定的“最佳实践”有关。
对于它的价值,我的直觉是将该功能放在控制器中。对我来说,模特应该尽可能接近财产袋。如果模型中存在逻辑,那么它应该专注于通过附加的只读参数转换模型中的现有数据。我还发现将所有UOW管理保留在控制器中更清洁,其中DI可用于提供适当的UOW实例,无论是从站点调用还是从测试调用。
希望有所帮助!