我被要求在我的.Net-MVC网络应用程序(范围蠕变)中添加一些内容到我的登录过程中,当我实现时,我注意到我的控制器变得臃肿。作为一项规则,我们试图保持我们的控制器非常薄,我们的大部分繁重工作都是在服务中完成的。 这是我想要做的:
服务:
private bool IsLogonDisabled(out string enable, out string disable)
{
try
{
enable = null;
disable = null;
DateTime enableDate;
DateTime disableDate;
string enableDateTime = (UnitOfWork.SystemSettingEntryRepository.GetItem(SystemSettingEntryType.SystemLoginEnableDatetime)).Value;
string disableDateTime = (UnitOfWork.SystemSettingEntryRepository.GetItem(SystemSettingEntryType.SystemLoginDisableDatetime)).Value;
if (DateTime.TryParse(disableDateTime, out disableDate) && DateTime.TryParse(enableDateTime, out enableDate))
{
disable = DisableDateTime;
enable = EnableDateTime;
}
if (enableDateTime =="" & disableDateTime == "")
{
//compare the current date time with the window allowed
if (DateTime.Compare(disableDate.AddMinutes(-3), DateTime.Now) < 0)
{
return true;
}
}
return false;
}
catch (Exception ex)
{
OnServiceException(ex);
throw;
}
这是我的控制器:
[AllowAnonymous]
[HttpPost] // if there is a system message display it.
public ActionResult IsLogonDisabled(enableDate, disableDate)
{
if (!staffAuthenticationService.IsLogonDisabled())
{
return ValidateLogon( enable, disable);
}
logon.ErrorMessage = ("System logins will be disabled at " + logon.DisableDateTime + " EST for system maintenance." + "System logins will be enabled at " + logon.EnableDateTime + " EST after system maintenance is complete.");
return Json(logon);
}
我要做的是将我在服务方法中检索的值传递给此控制器,以便我可以在错误消息中使用它。
我的问题是:尝试封装这个逻辑并将其传递给控制器是合乎逻辑的,通常我会保存模型但在这种情况下它是一个瞬态模型。
答案 0 :(得分:1)
我建议您在服务层中有一个返回LogOn模型的方法,例如:
Class LogonModel
{
bool IsValidLogin;
bool IsLogonDisabled;
string DisabledMessage;
}
然后,您可以执行服务层中的所有逻辑,并且您的视图会适当地处理返回的模型。