質問

MVC 2を理解し、将来の開発のための実行可能なプラットフォームとして私の会社を採用させようとするために、私は最近多くの読書をしています。過去数年間、ASP.NETとかなり独占的に仕事をしてきたので、やるべきことがありました。

現在、リポジトリパターン、モデル、コントローラー、データアノテーションなどを理解しています。しかし、参照アプリケーションでの作業を開始するのに十分に理解しないようにすることが1つあります。

1つ目は、サービスレイヤーパターンです。 Stack Overflowに関する多くのブログ投稿や質問をここで読みましたが、このパターンの目的を完全には理解していません。 Golf TrackerアプリケーションでMVCENTRALでビデオシリーズ全体を見て、彼が投稿したデモコードを見て、サービスレイヤーはまったく作業を実行しないリポジトリパターンの別のラッパーであるように見えます。

私もこの投稿を読みました: http://www.asp.net/learn/mvc/tutorial-38-cs.aspx そして、それは私の質問に多少答えているように思われましたが、あなたがあなたの検証を実行するためにデータアノテーションを使用しているなら、これは不必要なようです。

デモや投稿などを探しましたが、パターンを説明し、それを使用する説得力のある証拠を与えてくれるものを見つけることができないようです。

誰かがこのパターンを使用する2年生(OK、5年生)の理由を教えてください。

役に立ちましたか?

解決

MVCパターンでは、モデル、ビュー、コントローラーの3人のプレーヤー間で責任が分離されています。

モデルはビジネスのものを行う責任があり、ビューはビジネスの結果を提示します(ユーザーからのビジネスへの入力も提供します)。もう一方。

モデルは通常、データベースによってバックアップされるため、DAOSにアクセスできます。あなたのビジネスは...まあ...ビジネスや保管またはデータベースの内外でデータを取得するか、取引しています。

しかし、誰がDAOを調整しますか?コントローラー?いいえ!モデルは必要です。

サービスレイヤーを入力します。サービスレイヤーはコントローラーに高いサービスを提供し、舞台裏で他の(低レベルの)プレーヤー(DAO、その他のサービスなど)を管理します。アプリのビジネスロジックが含まれています。

使用しないとどうなりますか?

ビジネスロジックをどこかに配置する必要があり、被害者は通常コントローラーです。

コントローラーがWeb中心の場合、その入力を受信し、HTTPリクエスト、応答として応答を提供する必要があります。しかし、RPCまたは他のものと通信するWindowsアプリケーションからアプリに電話したい場合(そして、それが提供するビジネスにアクセスしてください)。それでは何?

まあ、あなたはコントローラーを書き直して、ロジッククライアントが不可知論されるようにする必要があります。しかし、サービスレイヤーを使用すると、すでにそれがあります。あなたは物事を書き直す必要はありません。

サービスレイヤーは、特定のコントローラーの実装に関連付けられていないDTOとの通信を提供します。コントローラー(どのタイプのコントローラーに関係なく)が適切なデータを提供している場合(ソースのマターなし)、サービスレイヤーは、発信者にサービスを提供し、関与するビジネスロジックのすべての責任から発信者を隠すことを行います。

他のヒント

私は上記のDPBに同意すると言わざるを得ません。ラッパーIEサービスレイヤーは再利用可能であり、モック可能です。現在、このレイヤーをアプリ内に含めるプロセスにあります...ここに私が熟考している問題/要件のいくつかがあります(非常に迅速:P)それはあなた自身の助けになる可能性があります...
1.複数のポータル(ブロガーポータル、クライアントポータル、内部ポータルなど)は、多くの異なるユーザーがアクセスする必要があります。それらはすべて別々のASP.NET MVCアプリケーションでなければなりません(重要な要件)
2.アプリ自体では、データベースへのいくつかの呼び出しが類似しています。メソッドとデータの処理方法はリポジトリレイヤーから処理されます。間違いなく、各モジュール/ポータルの一部のコントローラーは、同じ呼び出しの正確なバージョンまたは過負荷バージョンを作成します。したがって、サービスレイヤー(インターフェイスへのコード)が必要な可能性があります。
3.サービスレイヤー用に個別のクラスプロジェクトを作成した場合、データレイヤーに対して同じことを行うか、サービスレイヤーと組み合わせて、モデルをWebプロジェクト自体から遠ざける必要があります。少なくともこのように、私のプロジェクトが成長するにつれて、データアクセスレイヤー(すなわちlinqtosql-> nhibernate)を捨てることができます。欠点は、彼らがすべてを吹き飛ばす可能性があるかもしれません笑...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top