mvc常用代码的最佳实践

时间:2012-08-10 20:12:53

标签: asp.net-mvc

我有一个MVC应用程序。以下代码用于控制器和多个控制器中的多个位置。我想将这些代码放在一个地方,并从每个位置调用它。在MVC中最好的方法是什么?

下面的代码从数据库中获取一行,并创建可从视图中读取的ViewData。使用webforms,我会在类中创建一个public sub并传递年和月值。这段代码有没有办法成为模型的一部分?

var monthlyexpenseincome = (from vu_monthlyresult in dbBudget.vu_MonthlyResults
                            where vu_monthlyresult.Month == defaultmonth && vu_monthlyresult.Year == defaultyear
                            select vu_monthlyresult).Single();

var yearlyexpenseincome =  (from vu_yearlyresult in dbBudget.vu_YearlyResults
                            where vu_yearlyresult.Year == defaultyear
                            select vu_yearlyresult).Single();

ViewData["MonthlyExpenses"] = monthlyexpenseincome.Expenses;
ViewData["MonthlyIncome"] = monthlyexpenseincome.Income;
ViewData["MonthlyProfit"] = monthlyexpenseincome.Income - monthlyexpenseincome.Expenses;

2 个答案:

答案 0 :(得分:1)

通常,如果你有多个控制器的公共代码,你可以创建另一个继承自Controller的类,并保留你的方法,让你的独立控制者继承这个新类

public class BaseController : Controller
{
   protected string GetThatInfo()
   {
      //do your magic logic and return some thing useful
      return "This is demo return.Will be replaced";
   }
}

现在你可以继承你的其他控制器了

public class UserController: BaseController 
{
  public ActionResult Index()
  {
    return VieW();
  } 
}     

但在您的情况下,您所处的数据是您的域数据特有的。所以我建议你把它移到另一个班级(比如一个新的服务/业务层)

public static class ProfitAnalysis
{
  public static decimal GetTotalExpense()
  {
     //do your code and return total
  }

}

你可以从任何你想要的地方打电话

decimal totalExp=ProfitAnalysis.GetTotalExpense();

你很快就会意识到,ViewData这么多用法会使你的代码难以阅读和维护。不要等到那一天。切换到强类型类以传递数据。

答案 1 :(得分:0)

您应该将查询放在“业务层”中,这只是您调用以执行业务逻辑的类。然后,您可以在任何您喜欢的地方重用它,只需实例化业务类并使用它。如果方法不需要状态,你也可以使这些方法保持静态,那么你甚至不必实例化它。

例如:

var expenseService = new expenseService();

ViewData["MonthlyExpenses"] = expenseService.GetMonthlyExpenses();