13

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

そう:

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

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

また、後者の方が適切である場合、この ServiceManager オブジェクトをブートストラップで構成しますか? つまり、アプリに必要なさまざまなサービスをブートストラップでサービス マネージャーに登録しますか?

上記のいずれも適切でない場合、サービス層の実装方法をよりよく理解するにはどうすればよいですか?

前もって感謝します。

4

3 に答える 3

4

私がこの質問を読んだ方法では、実際に答えるべきことが 2 つあります。

A) 「Service」を「CustomerService」と「OrderService」に分割する、つまり、ドメインの概念ごとにグループ化することをお勧めします。

B) 次に、依存性注入を使用して、必要な場所で適切なサービスを直接取得するため、基本的に代替 1 を使用しています。代替 2 で追加された抽象化は、IoC コンテナーが重要な部分を実行するため、追加の価値を提供しません。 .

于 2009-08-29T19:03:12.613 に答える
3

「ファサード」を使用することは、1 つの方法です。

「ファサードは、より大きなコード本体への単純化されたインターフェースを提供するオブジェクトです」

于 2009-08-29T19:29:47.367 に答える
2

私は個人的には #2 を好みます。はい、通常はブートストラップで構成するか、何らかの IoC コンテナーを使用して依存関係を解決し、実際の具体的なインスタンスを提供します。

私もコメントしたいと思います。はい、これはおそらく個人的な好みであることを理解しています. これらのオブジェクトに「サービス」レイヤーという名前を使用しないようにしてください。それらをリポジトリまたは何か他のものとして参照してください。サービスを使用すると、その用語は過負荷になります...なぜなら、開発者は「残りのサービスまたはwcfサービスのようなものですか?」のようなものだからです。私を信じてください、私たちは最近のプロジェクトでそれを行いました.コードを変更する場所について話しているとき、私たちはいつも混乱しています:-P

于 2009-08-29T18:35:55.947 に答える