4

本当に簡単な質問、

アーキテクチャ的に最も効果的なコミュニティサポートを探しています。

たとえば、次の場合:TempData["MySetting"]?どこに保管すればいい"MySetting"ですか?それが必要です

  1. 別のクラスでアクセスできるようにTempData[Config.MySetting];
  2. web.configで、アクセスがTempData[ConfigurationManager.AppSettings["MySetting"];
  3. インライン、文字列のままにしますTempData["MySetting"];か?
  4. いくつかの定数テーブルのDBで、

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

私はオプション4を扱いませんが、全体像を完全にするためにオプション4を持ってきました。では、何を提案し、その理由は何ですか?

質問の編集 は、TempDataの場合ではなく、aspmvcの定数についてかなり一般的です。

ありがとう。

4

5 に答える 5

4

TempData特定のケースでは、データをプロパティとして公開するラッパーを作成する必要があります。へのすべてのアクセスは、TempDataそのラッパー内に隠されている必要があります。この場合、のすべての使用は最大"MySetting"2つに制限されます。使用法が1つしかない場合は、何もする必要はありません。2つある場合は、フィールドとして定義します。"MySetting"private const

要するに:

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

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

簡潔にするために、ここではカップリング(タイト)とエラー処理(なし)については扱いません。

于 2012-08-11T19:39:27.657 に答える
4

私は一緒に行きます:

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

ConstとReadonlyの詳細

于 2012-08-11T20:03:15.897 に答える
3

設定は変更されますか?デプロイする環境に応じて?はいの場合は、間違いなくWeb.configファイルに保存する必要があります(キーと値のペアのカップルほど単純でない場合は、カスタムセクションを作成することもできます)。

使用するすべての環境(独自の開発ボックス、サーバー、およびデプロイする可能性のあるテスト/ステージングマシンを含む)で同じである場合は、最初のオプションである、いくつかの定数を使用してクラスを宣言します。

それらをデータベースに保存する限り、それは実際にはどのような設定に依存します。それらをあなたのウェブサイトのユーザーごとにしたければ、あなたはそれらをあなたのデータベースに保存することになるかもしれません。または、それらを変更できるようにしたい場合(Webサイトの実行中にweb.configファイルを編集することは最善の方法ではありません)。

インラインのままにしないようにします。

于 2012-08-11T19:25:50.973 に答える
3

このアプローチを試すことができます:

public static class Constants
{
       public static class Actions
       {
            public const string Administration = "Administration";
       }
}
于 2012-08-11T19:36:00.000 に答える
1

定数が実際に定数であると仮定すると、実行時に変更されることはありません。このシナリオでは、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";
}
于 2012-08-11T20:14:47.267 に答える