0

ASP.NET MVC 4 | C# | .NET 4.5 | かみそり

ドロップダウン リストのデータを返す Web サービスがあります。このデータはモデルに保存され、ビューに表示されます。現在、コントローラーで Web サービス呼び出しを行い、ビューに渡される前にデータをモデルに割り当てています。

これが適切なセットアップなのか、それとも Web サービス呼び出しをモデルに配置する必要があるのか​​疑問に思っています。Web サービスの呼び出しに関するベスト プラクティスのガイドラインはありますか? それらはコントローラーから厳密に呼び出す必要がありますか、それとも問題ではありませんか?

前もって感謝します!

4

2 に答える 2

2

パフォーマンスに重大な影響がない限り、理想的な論理セットアップは、これがモデル内で行われることです。

よく言われるのは、「コントローラーは軽く、モデルは重く保つ」というものです。(誰が最初に言ったのかはわかりません。)

コントローラーはモデルにデータを入力するべきではありません。モデルのインスタンスを取得してビューに提供するだけです。せいぜい、いくつかのルーティング ロジック (どのビューを送信するか、またはリダイレクトで応答するかを決定するなど) を実行し、基本的には、モデルとビュー/UI の間の相互作用を制御する必要があります。

したがって、次のような代わりに:

public ActionResult Index()
{
    var model = WidgetFactory.Create();
    model.SomeProperty = DataService.GetPropertyInfo();
    return View(model);
}

あなたはこれをしているはずです:

public ActionResult Index()
{
    var model = WidgetFactory.Create();
    return View(model);
}

モデルでこれを使用します:

public SomeType SomeProperty
{
    get
    {
        return DataService.GetPropertyInfo();
    }
}

または、データの取得にオーバーヘッドがある場合は、次のようになります。

private SomeType _someProperty = null;
public SomeType SomeProperty
{
    get
    {
        if (_someProperty == null)
            _someProperty = DataService.GetPropertyInfo();
        return _someProperty;
    }
}

SomePropertyこれには、モデルに関する限り不変になるという追加の利点があります。そのデータを変更することはなく、提供するだけであるため、コントローラーが使用できるそのプロパティのセッターを用意する理由はありません。

ここでの考え方は、モデルが自己完結型であり、可能な限り自己完結型であるということです。または、可能な限りカプセル化します。それ自体がビジネスコンセプトを表しています。そのビジネス コンセプトの一部が別のシステムに存在するデータである場合、モデルはそれをカプセル化します。Widgetがデータを取得する場所を物理的に知ることは、コントローラの責任ではありませんSomePropertyWidgetがそのデータを公開していることを知っているだけです。がどこでWidgetそれを取得するかは 次第Widgetです。

于 2013-10-04T23:13:19.480 に答える