2

私は現在、ASP.Net MVC 4 SAAS アプリケーション (C#) を構築しており、計画の設計に行き詰まっています。つまり、顧客が選択したPlan A場合は、いくつかのものにアクセスできる必要があり、選択Plan Bした場合は他のものにアクセスできるということです。

私がこだわっている部分は、アカウントの計画をすべてのアクションと共有するベスト プラクティスです。グローバル変数を持つことは悪い習慣であることに気づきましたが、すべてのアクションの計画を立てるためにDBへの往復をしたくありません。

私が考えているのは、静的モデルを宣言し、ある時点で設定して後でアクセスするだけのThis SO answerのようなものです。あなたの意見では、これはこれを行うための最良の方法ですか? より良い方法はありますか?

4

1 に答える 1

5

ベスト プラクティスは、プロジェクトに IoC を含め、構成オブジェクトをコントローラーに挿入することだと思います。

コントローラのコード例:

public class YourController : Controller
 {
     private IConfigService _configService;

     //inject your configuration object here.
     public YourController(IConfigService configService){
           // A guard clause to ensure we have a config object or there is something wrong
           if (configService == null){
               throw new ArgumentNullException("configService");
           }
           _configService = configService;
     }
 }

この構成オブジェクトのシングルトン スコープを指定するように IoC を構成できます。このパターンをすべてのコントローラーに適用する必要がある場合は、基本コントローラー クラスを作成してコードを再利用できます。

あなたの IConfigService

public interface IConfigService
{
    string ConfiguredPlan{ get; }
}

あなたの ConfigService:

public class ConfigService : IConfigService
{
    private string _ConfiguredPlan = null;

    public string ConfiguredPlan
    {
        get
        {
            if (_ConfiguredPlan == null){
                    //load configured plan from DB
            }
            return _ConfiguredPlan;
        }
    }
}
  • このクラスは簡単に拡張して、接続文字列、デフォルト タイムアウトなどの構成をさらに含めることができます。
  • コントローラー クラスにインターフェイスを渡します。単体テスト中にこのオブジェクトを簡単にモックできます。
于 2013-07-27T09:25:59.003 に答える