2012-08-10 119 views
1

我有一個MVC應用程序。以下代碼正在控制器中的多個位置和多個控制器中使用。我想將這些代碼放在一個地方,並從每個位置調用它。 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; 
+0

查看Facade模式以處理您的數據查詢。 – Ammar 2012-08-10 20:20:17

+0

檢查存儲庫模式 – JOBG 2012-08-10 22:22:22

回答

0

你應該把你的查詢,在「業務層」,這僅僅是你打電話做業務邏輯的類。然後,您可以在任何你喜歡的地方重複使用它,只需實例化業務類並使用它。如果方法不需要狀態,也可以使方法爲靜態,那麼您甚至不必實例化它。

例如:

var expenseService = new expenseService(); 

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

一般來說,如果你有多個控制器共同的代碼,你可以創建另一個類,從控制器繼承和保持你的方法有,讓你的indidual Controlellers繼承這個新類

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(); 

調用它,你會很快意識到,有這麼多的使用使得你的代碼難以閱讀和維護。不要等待那一天。切換到強類型的類傳遞數據。