0

私は最初のMVCアプリケーションを書いている最中です。他の回答で与えられたガイドラインを適用しようとしていますが、プロジェクトの構造がこれを困難にしています(そして私は物事を混乱させています!)。現在、アプリケーションは次のレイヤーに分割されています。

  • Web API サービスを使用してアクセスされるドメイン オブジェクト/ロジック。一部のコードは複数の WPF アプリケーションで使用されており、私の管理下にないため、このレイヤーをブラック ボックスとして扱っています。

  • リポジトリ層。このレイヤーは Web API サービスを呼び出し、単体テストを支援するために追加されました。サービスを呼び出し、逆シリアル化されたドメイン モデルを返します。

  • コントローラ。 データの使用方法に応じて、2 つの異なるスタイルのコントローラーがあります。

    最初のタイプでは、コントローラがリポジトリ内のメソッドを呼び出し、マッパー クラスを使用してドメイン オブジェクトをビュー モデルに変換します。一部のビュー モデルは基になるドメイン オブジェクトと大きく異なるため、マッピングは手動で行います。例えば:

    DomainObject domainObject = m_repository.GetObject(id);
    ViewModel model = ModelMapper.PopulateViewModel(domainObject);
    return View(model);
    

    2 番目のタイプは、AJAX 呼び出しで使用されるデータを提供するように設計されています。ここでは、コントローラーが以前と同様にリポジトリを呼び出しますが、ドメイン モデルはカスタム Json.Net コンバーターを使用して JSON に変換されます。例えば:

    var jsonNetResult = new JsonNetResult();
    DataObject data = m_repository.GetData(id);
    
    jsonNetResult.Converters.Add(new DataObjectConverter());
    jsonNetResult.Data = data;
    
    return jsonNetResult;
    

質問:

JSON、ドメイン オブジェクト、ビュー モデルの間で多くの切り替えを行っているように感じます。これは特にパフォーマンスが高いようには見えません.リポジトリはコントローラーの代わりにビューモデルを作成できますか?

データが JSON として提供されることを意図している場合は、ドメイン オブジェクトを JSON に変換し、ビュー モデルは使用しません。これは一貫性がないように見えますが、ビューモデルにマップしたくありません。これは正しいアプローチですか?

エンティティ フレームワーク上で MVC を使用する例はたくさんありますが、MVC アプリケーション内で Web API を使用する例を見つけるのに苦労しています。誰かが私を正しい方向に向けることができますか?

うまくいけば、これは理にかなっています、ありがとう!

4

1 に答える 1

2

アプリケーションのより単純なモデルを提案します。Web API と従来の MVC コントローラーを、リポジトリ レイヤーが永続ストレージを反映するリポジトリ情報を公開する 2 つの方法と考えてください。MVC コントローラーで Web API を呼び出す必要はありません。リポジトリに直接アクセスしてください。

MVC アプリケーションで Web API を使用する方法の例が多数あります。たとえば、[1] を参照してください。

ヘンリク

[1] http://www.asp.net/web-api/samples

于 2012-07-07T06:43:26.277 に答える