9

MVC アプリケーションを開発するときに誰もが完全なアーキテクチャを使用しているわけではないことは承知していますが、次のアーキテクチャがあると仮定しましょう。

App.Core --> Class Library (POCO or Domain objects)
App.Data --> Class Library (Repository and Entity Framework)
App.Service --> Class Library (Service layer with all business logic)
App.Web --> asp.net MVC 3.0 project

App.Data --> Has a reference to App.Core
App.Service --> Has a reference to App.Core and App.Data
App.Web --> Has a reference to App.Core and App.Service

MVC アプリケーション内では、次のアプローチに従うようにしています。

  • Controller 内 (メソッド内) で、ViewModel をインスタンス化します。
  • その ViewModel 呼び出しメソッドを App.Service Layer から埋めます
  • ViewModel が満たされると、それを View に戻します (ビューは厳密に型指定されます)。

これは 99.9% の確率で発生します。それはきれいで、私たちはそれが好きで、それ自体をかなりうまく活用しています..など!

今私の質問は次のとおりです。

アプリケーションを MVC 4.0 に移行し、新しいWeb APIアプローチの使用を開始することにした場合、それが現在のアーキテクチャのどこ (またはどのように) に適合するかを完全に理解できるかどうかわかりません。

私たちはこれを変える用意があることを心に留めておいてください!

App.Service と App.Web の間に配置する新しい App.WebAPI レイヤーを作成する必要がありますか? これは、コントローラー内で App.Service を直接呼び出す必要がなくなり、代わりに新しい App.WebAPI レイヤーを呼び出すことを意味します。

または、Web API を App.Web レイヤー内に残して、コントローラーが他の APIControllers を呼び出すようにし、それが App.Service レイヤーを呼び出しますか?

ここで何か意味があるかどうかはわかりませんが、さまざまな情報に興味があるので、遠慮なく提案してください。

ありがとう

4

2 に答える 2

13

考慮すべきケースがいくつかあります。

このWebAPIをMVCアプリケーションのサービスレイヤーおよびデータアクセスとして機能させますか?はいの場合は、ASP.NET MVCプロジェクトからApp.Serviceのすべての参照を完全に削除し、代わりにWebAPIにクエリを実行してデータをフェッチする必要があります。この場合、WebAPIはASP.NETMVCアプリケーションとデータアクセスの間にあります。サービスレイヤーと通信し、HTTPプロトコルを介して公開するのはWebAPIです。

または、他のクライアント(Webブラウザー以外)で使用できる追加のAPIをWebサイトに提供しますか?この場合、ASP.NETMVCアプリケーションとWebAPIは同じレイヤー上にあります。どちらもサービスレイヤーにクエリを実行してビューモデルを埋めます。MVCアプリケーションの場合、これらのビューモデルをビューに渡してHTMLに変換しますが、WebAPIレイヤーではおそらくわずかに異なるビューモデルを使用します。引き続きサービスレイヤーから入力され、対応するシリアル化メカニズム(JSON、XMLなど)を使用してクライアントに渡されます。

于 2012-03-01T13:36:48.637 に答える
1

これが遅れていることは知っていますが、実際には同じアドバイスを探していて、この投稿を見つけました.

MVC と Web API の両方が同じレイヤー内にある」ということは、コードの保守作業が増えること、またはコードの重複を意味するのではないでしょうか? mvc web はブラウザー クライアントと見なされませんか? .. 私にとっては、WebAPI を他のすべての人にとって唯一のレイヤーにすることは理にかなっています。次に、処理のためにサービスレイヤーを呼び出します。

Web API と MVC の両方をサービス層と直接やり取りする利点は何ですか? Web API はサービス レイヤーのラッパーにならないのですか?

于 2012-09-01T09:38:59.690 に答える