簡體   English   中英

可以將私有方法放在我的控制器中,還是應該將它們分成某種類型的asp.net mvc輔助類?

[英]Is it okay to put private methods in my controller or should I separate them out into some type of helper class with asp.net mvc?

我有一個控制器根據用戶類型加載一些下拉菜單。 例如:

public ActionResult Index()
    {
      switch (SessionHelper.ViewLimit)
          {
            case "C":
              ViewData["CustDivision"] = LoadCustDivisions();
              ViewData["Customer"] = LoadCustomers();
              break;
            case "P":
              ViewData["Customer"] = LoadCustomers();
              ViewData["Employee"] = LoadEmployees();
              break;
            case "D":
              ViewData["Customer"] = LoadCustomers();
              ViewData["Division"] = LoadDivisions();
              break;
             default:
              return RedirectToAction("Logout", "Account");
          }
    return View()
    }

首先,switch語句是否屬於控制器,如果是,那么我應該在哪里放置LoadCustomers(),LoadDivisions(),LoadEmployees()?

我覺得沒有 - 控制器中的私有方法會產生比他們解決的問題更多的問題。 這是我的理由:

當您想要在控制器中創建私有方法時,您已經識別出一段代碼,這些代碼有點“潦倒”或重復。 這是創建單獨的幫助程序類或將代碼向下移動的充分理由。

一個助手類,即使只有一個方法,也更容易測試和模擬。 它還創造了一個更強大的邏輯分離關注點。 這使得在調試時更容易處理。

我也同意tvanfosson使用策略模式來幫助不重新發明輪子並展示對軟件開發的更成熟的理解。

但實際上,這是你可以爭論兩種永恆方式的情況之一。 但它歸結為你所瞄准的工藝水平,或更准確地說,願意滿足。

如果它們僅用於此控制器,我會說將它們保密為控制器是可以的。 一旦您發現其他地方需要它們,那么請將它們遷移到DAL或幫助程序類。

您的體系結構的更大問題 - 使用switch語句或策略模式等 - 很難從這個片段中回答。 我並沒有特別被這個switch語句所冒犯,但您可能希望讓SessionHelper返回一個策略,為您加載正確的視圖數據。 在這種情況下,加載視圖的代碼將放在策略類中。

  DataStrategy strategy = SessionHelper.GetDataStrategy()
  if (strategy == null)
  {
       RedirectToAction("Logout","Account");
  }

  strategy.LoadViewData( ViewData );

  return View();

因為ASP.NET MVC傾向於約定優於配置,所以任何以Controller結尾的類的公共方法都被認為是動作方法。 如果他們是私人的,他們就不是。

因此,在控制器類中使用私有方法是完全可以的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM