私は最初の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 を使用する例を見つけるのに苦労しています。誰かが私を正しい方向に向けることができますか?
うまくいけば、これは理にかなっています、ありがとう!