将数据分配给您的视图始终是Controller的责任;也就是说,您似乎可以将您的逻辑抽象为一个类来处理使用您的存储库并返回一个具有您需要的详细信息的简单对象。
var myModelData = _someOtherObject.GetSelectedOrder(); var viewModel = new OrderViewModel { Order = myModelData.Order, isReaded = myModelData.IsRead }; return View(viewModel);
对于例外,如果只想让_someOtherObject方法抛出异常,则应定义ErrorFilterAttribute并将其应用于action方法。
使用依赖注入和重构这些行来分配 private readonly 控制器构造函数中的字段。
private readonly
NHibernateHelper helper = new NHibernateHelper(); UnitOfWork unitOfWork = new UnitOfWork( helper.SessionFactory ); Repository<Order> orderRepo = new Repository<Order>( unitOfWork.Session );
然后,重构 try-catch 语句到异常处理操作过滤器。有关此内容的教程和代码,请访问: http://www.squaredroot.com/2008/04/02/mvc-error-handler-filter/ 。
try-catch
然后你的控制器动作降到了。
[RedirectToActionOnError(Action = "foo")] public ActionResult Index() { var viewModel = _orderRepo.All() .Select(order=> new OrderViewModel { Order = order, isReaded = order.Interactions.Any(x => x.Readed), }); return View(viewModel); }
作为旁注,你永远不必写 if(someBooleanValue == true) ,你可以写 if(someBooleanValue)
if(someBooleanValue == true)
if(someBooleanValue)