2009-08-29 10 views
13

MVCアーキテクチャでは通常どのようにサービスレイヤを実装しますか?それは、基本的なビジネスオブジェクトへのすべての要求を提供する1つのオブジェクトですか?あるいは、ビジネスオブジェクトと相互作用するさまざまなサービスオブジェクトを扱うオブジェクトのようなものでしょうか?だから、MVCアーキテクチャでのサービスレイヤの実装

  1. コントローラ - >サービス - > getUserById()、または:

  2. コントローラ - > ServiceManager - > getUserService() - > getUserById()

また、後者が適切な場合、このServiceManagerオブジェクトをブートストラップで構成しますか?言い換えれば、あなたのアプリケーションのために必要とする様々なサービスをブートストラップのサービスマネージャーに登録しますか?

上記のいずれも該当しない場合は、サービスレイヤの実装方法を理解するのに役立ちますか?

ありがとうございます。

答えて

4

私はこの質問を読んで、本当に2つのことがあります答え:

A) "Service"を "CustomerService"と "OrderService"に分割することをお勧めします。つまり、ドメインの概念によってグループ化されています。

B)2番目に依存性注入を使用して、必要な場所で適切なサービスを直接取得するので、基本的にalt 1を使用しています。代替2の抽象化では、IoCコンテナ重要な部分です。 "ファサード" を使用して

+0

あなたの応答krosenvoldをありがとう。あなたは答えます: A)理解して同意しました B)私は冗長抽象についてあなたが言っていることを見ています。しかし、私がJoelにコメントしたように、私はMVC環境でIoCがどのように実装されるのか苦労しています。 これはどこで起こりますか?コントローラーで?これはどのように妥当な価値を提供しますか?私はIoCの原則をあまりにもよく理解しているとは思えません。 また、ブートストラップでも設定することについて話していますか? もしあなたが精緻化したいのであれば(簡単な例で)、私はそれをとても感謝します。ありがとう。 –

+0

依存性注入について理解するための重要な概念は、有効であることが*ほとんどの*場所で使用されることです。通常、IoCコンテナはインフラストラクチャレベルが非常に低く、どこにでも浸透します。 – krosenvold

2

私は個人的には#2が好きですが、一般的にはブートストラップで構成されています。また、特定のIoCコンテナを使用して依存関係が解決されます。

私もコメントしたいと思います。これはおそらくもっと個人的な好みであると私は理解しています。これらのオブジェクトに「サービス」レイヤーという名前を使用しないようにしてください。彼らをリポジトリなどと呼んでください。あなたがサービスを使用すると、その用語は過負荷になります... devsは "あなたは休憩やwcfサービスのような意味ですか?"のようなものですから。私を信頼してください、最近のプロジェクトでそれを行いました。私たちがコード変更を行う場所について話しているとき、私たちはいつも混乱しています:-P

+0

ジョエル、ご回答ありがとうございました。私はあなたのサービスに名前を付けることに反対することに同意します。私はちょうどそれを拾いましたが、実際には少し自分自身に眉をひそめました。しかし、その層のコンセプトが私にアピールしました。 私はこの時点でも依存性注入の概念全体を把握しようとしていますが、これがどのように機能するかは完全にはわかりません。これがMVC環境でどのように機能するかの簡単な例を挙げてください。 私は、どこのオブジェクトに何を注入するのですか?私はそのコンセプトをつかむのに苦労します。前もって感謝します。 –

+0

私はあなたがあなたの頭をiocの周りに包んでいると言っているときに私が理解すると言うことを信じています。このコメントボックスは実際に使用するには小さすぎますが、ninject lib(http://ninject.org/)をチェックすることをお勧めします。チュートリアルは段階的に進み、概念を紹介し始めます。 要約すると、具体的な実装からAPIを分離することです。あなたの特定の実装ではなく、あなたのAPIに対してあなたのコードが動作するはずです...ユニットテストのときに後で変更することができます –

+3

Martin Fowlerによると、サービス層は "確立するサービスの層利用可能な操作のセット "これらの操作は通常はCRUDですが、必ずしもそうではありません。だから私はサービス層=リポジトリとは思わない。私が愛している本当のサービスレイヤーがMVCにどのように適合するかは、まだ私にとって謎です。 MVCのMは、私が話しているサービスレイヤーをコントローラーが形成しない限り、Sに置き換えなければならないと感じています。私はそれがほとんどの人がそれをする方法だと思います。しかし、コントローラがアプリケーションの境界を定義する必要がありますか?私は混乱しています... –

関連する問題