2012-08-11 54 views
3

真的很簡單的問題,ASP.MVC應用程序常量,什麼是最好的/最優雅的方法?

我只是尋找社區支持什麼在結構上最好的作品。

說,以下情況:TempData["MySetting"]?我應該在哪裏存儲"MySetting"?它應該是

  1. 在不同的類,以便將訪問TempData[Config.MySetting];
  2. 在web.config中,這樣的訪問是TempData[ConfigurationManager.AppSettings["MySetting"];
  3. 內聯,把它作爲字符串TempData["MySetting"];
  4. 在數據庫中的一些常量表
  5. ,使

    var mySetting = (string)_db.GetConstant("MySetting"); 
    TempData[mySetting]; 
    

我不會選擇4處理,只是把它針對畫面的完整性。 那麼你有什麼建議和爲什麼

編輯 問題是相當一般的常量在asp mvc而不是TempData的情況。

謝謝。

回答

2

設置是否更改?取決於你部署的環境?如果是的話,那麼你一定要將它們存儲在Web.config文件中(如果它不像幾個鍵/值對那麼簡單,你甚至可以創建一個自定義節)。

如果它們在您使用的所有環境(包括您自己的開發盒,服務器以及您可能想要部署的任何測試/登臺機器)上都是相同的,那麼我會選擇第一個選項:一些常數。

只要將它們存儲在數據庫中,它確實取決於什麼樣的設置。如果您希望它們成爲您網站的每個用戶,那麼您最終可能會將它們存儲在您的數據庫中。或者如果你想能夠改變它們(在網站運行時編輯web.config文件不是最好的主意)。

我想盡量不要離開它,因爲它是內聯的。

+0

你提到的是有道理的。除了1-4之外還有其他選擇嗎如何創建自定義部分(不知道) - 可以請更新答案?感謝您抽出時間 – 2012-08-11 19:33:17

+0

您可以查看此URL以獲取有關如何爲您的Web.config創建自定義節的詳細說明:http://msdn.microsoft.com/en-us/library/2tw134k3.aspx As far作爲其他選擇,它實際上取決於你試圖存儲什麼,以及你的具體應用程序。 – 2012-08-11 20:05:35

2

你可以試試這個方法:

public static class Constants 
{ 
     public static class Actions 
     { 
      public const string Administration = "Administration"; 
     } 
} 
3

在您的特定情況下,你應該讓周圍TempData的包裝,這將暴露你的數據屬性。所有對TempData的訪問應該隱藏在該包裝中。在這種情況下,"MySetting"的所有用法將被限制爲最多二。如果只有一種用法,則不需要執行任何操作。如果有兩個 - 您將"MySetting"定義爲private const字段。

簡而言之:

public static class TempDataWrapper 
{ 
    private const string _mySettingName = "MySetting"; 

    public int MySetting 
    { 
     get { return (int) TempData[_mySettingName];} 
     set { TempData[_mySettingName] = value;} 
    } 
} 

爲了簡便起見,我們不與耦合在這裏處理(這是緊)和錯誤處理的緣故(這是沒有的)。

+0

謝謝。我的問題相當具體而不是具體。如何處理MVC應用程序內的不同常量? – 2012-08-11 19:48:18

+0

和其他應用程序一樣。它們是*常量* - 它們應該是硬編碼的。所有其他事情取決於使用情況,*僅限使用情況*。在這個問題上沒有一般的方法。 – 2012-08-11 19:56:14

3

我會去的:

public static class Config 
{ 
    public static readonly string MyValue = "SomeValue"; 
} 

更多Const vs Readonly

0

好吧,假設你的常量是真的常數,它們不會在運行時更改。對於這種情況,您可以使用const字段修飾符,在某些情況下使用static readonly修飾符來設置常量值。

public class MyConstants { 
    public const string MyConstantNameValue = "Value"; 
    public const int MyConstantNameValue2 = 123; 

    // prevent the class to be instantiated 
    protected MyConstants() { } 
} 

正如你看到的,你不定義MyConstants作爲一個靜態類,因爲如果你需要另一組常數如特定命名空間(外加全局常量)可以延長常數。

public class MyConstantsPlusSpecificNamespaceConstants : MyConstants { 
    public const string MySpecificConstantName = "Value2"; 
} 
+0

出於同樣的原因,您可以將其定義爲部分擴展而不需要子類別。謝謝。 – 2012-08-11 21:10:53

+0

如果部分是在同一個程序集中,是的,你可以。 – devundef 2012-08-11 23:52:06

相關問題