2011-05-13 21 views
15

ビジネスレイヤ、サービスレイヤ、データアクセスレイヤ、プレゼンテーションレイヤでWebアプリケーションを設計する伝統的な方法からMVCデザインパターンに移行すると、それが古いモデルにどのように適合するかを理解する。ASP .NET MVCアーキテクチャが従来の多層アーキテクチャにどのように適合するか

MVCモデル自体は、階層化されたアーキテクチャを介して達成されるのに必要とされ、使用されていた問題の分離を既に行っているようです。誰かがこのテーマについていくつかの光を当ててくださいできますか?下記の参考として

は、私はそれを理解する方法で、-are- プレゼンテーション層

MVCモデルビューモデルと一緒にこの

MVCのビューとコントローラのビューを共有してください - 可能性こと - データアクセス層またはビジネスレイヤ、あるいはサービス層

+1

可能重複[MVC(ASP.NET MVC)バンド3層アーキテクチャは、一緒に働くことができる方法は?](http://stackoverflow.com/questions/3047230/how-mvc- – jgauffin

+2

これは、物理的な分離の観点からではなく概念的な分離からより多くの3層アーキテクチャについて論じた他の記事と重複していません。 – Max

答えて

36

私は、アプリケーション全体の一部のみビュー(またはプレゼンテーション)としてAsp.Net MVCの一部を参照してください。

アプリを適切な方法で構築する方法に問題がありました。 オニオンアーキテクチャ
私はおよそhereを聞いた(特に画像がhereを見つけた)、私の解決策は、このようになります:

  • Project.Core
    ビジネスロジック/サービスの実装、エンティティ、他のプロジェクト(例えば、 "IRepository"、 "IAuthenticationService"、...)によって実装されなければならないインターフェース
  • Project.Data
    DB接続 - 私のケースでは、NHibernateリポジトリとエンティティマッピングがここにあります。全アプリ一緒にワイヤ - はProject.Core
  • データ -interfaces

  • Asp.Net MVC( "プレゼンテーション")Project.UI.Web
    プロジェクトを実装します。
    Project.Coreのインターフェイスの実装があり、Project.DataのインターフェイスとそれをCastle WindsorのようなDIフレームワークに配線します。

Project.UI.Webは、次の規則に従います(!)だけですのviewmodels

  • ビュー

    • そのモデルは(ワン彼ら独自のviewmodelを消費ビュー - ワン - ビューモデル)
    • コントローラちょうどドメインは、ビジネスサービスにデリゲート実際の作業(ビジネスロジック)(がexaclyのviewmodelsについて何も知らないビジネス・ロジックとして)オブジェクトそれ検証入力、にdが変換されます。

    概要:
    あなたがこのモデルに従えば、それはプロジェクトの焦点に便利です。コア:リアアプリケーションです。それはデータの本当の持続性について心配も、それがどのように提示されるのか気にもしません。それはちょうど「方法」です。しかし、それは、他のプロジェクトが実装を提供しなければならない規則と契約(インタフェース)をレイアウトしています。

    私はこれがAsp.Net MVCアプリケーションのレイアウト方法に役立つことを願っています!

    Lgは

    warappaの
  • +1

    サービス実装がどのようにコアになるのか分かりません。 Projectの外にはいけませんか.Core?そうすれば、svcインターフェイスの代わりにsvcへの誤った接続を防ぐことができます。 – Narayana

    -2

    非常に基本的な説明:

    新しいMVCアプリケーションを作成すると、自動的に[コントローラ]、[モデル]、[ビュー]フォルダが表示されます。

    コントローラはビ​​ジネスレイヤのように機能します
    モデルはデータアクセス/サービスレイヤー
    です。ビューはプレゼンテーションレイヤーです。

    詳しくは、http://www.asp.net/mvcを参照してください。

    +14

    コントローラはビ​​ジネスレイヤではありません。実際、コントローラーはできるだけ薄くする必要があります – psousa

    +2

    私はこのモデルで@psousaを使用していますが、実際にはコントローラー内にビジネスロジックを持たず、モデルのすべてを処理することをお勧めします。 – Max

    0

    簡潔には何も変わりません。

    MVP(モデル、ビュー、プレゼンター、Windowsフォーム/ asp.net共通)、MVC(モデル、ビュー、コントローラ)、MVVM(モデル、ビュー、モデルの表示) WPF/Silverlightで一般的に使用されています)。

    リンク:リンク上http://haacked.com/archive/2008/06/16/everything-you-wanted-to-know-about-mvc-and-mvp-but.aspx

    は、あなたの質問のいくつかの(すべてではない)を答える必要があります。

    私が通常ASP.NET MVCアプリケーションを書く方法は、CRUD操作用に少なくともサービス/ビジネスレイヤーハイブリッドを含めることです(データアクセスはビューモデルまたはコントローラにはなく、ビューにはないからです)!

    +0

    enitiyフレームワークを使用するとどうなりますか?それは、あなたに管理可能なMVCデータモデルのセットの形で抽象化を与えます。次に、データアクセス層を追加する必要がありますか? – Max

    +0

    Automapperのようなものを使用して、EFのエンティティをドメインモデルにマップすることができます。ドメインモデルをMVCモデル名前空間から除外し、それらを独自のアセンブリに配置することをお勧めします。 –

    3

    他にも言われているように、それほど変化はありません。マイアプリには、一般的なよう設計されています:

    • モデル・レイヤー(ドメインとビューモデル)
    • リポジトリ・レイヤー(データ・アクセス)
    • サービス層は、(時々 アプリ/要件に応じて、WCFサービスとして を実装しました)
    • サーバ側MVC レイヤ(Asp.net MVC自体)
    • クライアント側MVVMまたはMVC( 介しKnockout.js、BACKBONE.JS、又は 脊椎のいずれか。js)

    サーバー側のMVCレイヤーでは、コントローラーメソッドが非常に軽いです。彼らは通常、サービス層オブジェクトのメソッドを呼び出して、データを取得し、それをJsonデータとしてクライアントに渡します。

    私はJsonを送り返しているので、私の見解も非常に軽く疎です。通常、スクリプトを含むだけで、クライアント側のテンプレートライブラリでレンダリングされるテンプレートが含まれます。

    関連する問題