常见代码的MVC最佳实践

3
我有一个MVC应用程序。以下代码在控制器的多个位置和多个控制器中使用。我希望将此代码放在一个地方,并从每个位置调用它。在MVC中,最好的方法是什么?
下面的代码从数据库获取一行数据并创建ViewData,可以从视图中读取。对于WebForms,我会在类中创建一个公共子程序并传递年份和月份值。这段代码是否可以成为模型的一部分?
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;

请了解外观模式以处理您的数据查询。 - Ammar
检查仓储模式 - JOBG
2个回答

1

通常,如果您有跨多个控制器的公共代码,则可以创建另一个继承自控制器的类,并将您的方法放在那里,让您的各个控制器继承这个新类

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会使你的代码难以阅读和维护。不要等那一天到来。切换到强类型类传递数据。


0

你应该将查询放在“业务层”中,这只是一个类,你可以调用它来执行业务逻辑。然后你可以在任何地方重复使用它,只需实例化业务类并使用它。如果方法不需要状态,你还可以将其设置为静态的,这样甚至不需要实例化。

例如:

var expenseService = new expenseService();

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接