2009-11-02 34 views

答えて

11

あなたがサービスレイヤを持っていて、ビジネスロジックをリポジトリから(サービスレイヤの場合のように)抽象化して使用している場合、コントローラはそのサービスを呼び出すだけでよいメソッド。サービスレイヤは、レポへのカップリングになります。

さらに、Mayoの回答:モデルは、アプリケーション(レポ、サービス、UI /コントローラ)全体に渡されるデータクラスであるため、他のレイヤと同様にUI/Webレイヤがその上で動作する必要があります。

私はあなたがFowler's definitionの文脈とmodern aspnet mvcadaptionsでサービス層を実装する場合、あなたはあなたのサービス層から「肉のビジネス・ロジックを呼び出し、非常に小型で軽量な方法として設計され、あなたのコントローラのアクションを持つべきだと思います。

編集:私はちょうどあなたが使用を行うケースに関連する質問の一部に答えるためにしようと、サービス層が唯一のオプションですを持つを言っていません:私は私が明確ではなかったと思いますサービス層。特に、小規模なプロジェクトでは、サービスレイヤーは必ずしも必要ではないと言いました。

+0

+1サービス層のリンク – Mayo

0

私が作業してきたすべての例は、コントローラがモデル上で動作すべきであることを示唆しているようです。

私は、モデルがビジネスロジックからデータリポジトリまで(モデルとみなされるビジネスオブジェクトクラスとは対照的に)のすべてから構成されていることを著者が示唆していると聞きました。

個人的には、コントローラをリポジトリに対して動作するクラスで動作させることで、クリーンで一貫性を維持しようとしますが、難しい/速いルールがあるとは思いません。

+0

あなたが答えの人が好きではない理由についてのコメント...そうしないと誰も学習しません。 :) – Mayo

+0

+1は-1とは言いませんか?投票をしたのは私のことではありませんでしたが、答えは本当に助けになりません。リポジトリ/サービスパターンには、モデルがリポジトリ/サービスであるモデルはありません。私はちょうどサービスを操作したいと思いますが、これがコードの重複を招くかどうかはわかりません – LiamB

+0

私は〜を説明するかもしれません。私はちょうどあなたが違う概念ではなく、別の用語と呼んでいると仮定しました。今日研究することができます(仕事の遅い日)。 – Mayo

-1

コントローラーは、ユーザー入力を解釈し、Viewで使用するモデルを準備します。理解しています。いくつかの人々は真剣にモデルから論理のすべてのビットを削除することについて真剣ですが、私はそれについて肛門ではない。

IMHOは、DIを使用してコントローラ内からリポジトリにアクセスすることです。

+2

私はあなたがメーンですか? "コントローラからのすべてのビット"、 – LiamB

+0

ええと、いいえ、モデルからのすべてのビット。モデルはNOTHINGを行いますが、ユーザーの入力/要求に応じてCONTROLLERが収集したデータを格納します。 – Will

+0

これは「貧血モデル」であり、大部分の人にとっては非常に良い習慣とはみなされません。http://en.wikipedia.org/wiki/Anemic_Domain_Model – UpTheCreek

0

サービスレイヤは、基本的にビジネスロジック/ビジネスモデルのAPIです。たとえば、あなたの「最良の顧客」を得るための方法があるかもしれません。サービス層は、リポジトリを照会し、実行する必要のあるロジックを実行し、顧客を返却するために必要な処理を行います。そのような場合は、常にサービス層を通過する必要があります。

場合によっては、ビジネスモデルではなくビューモデルにある可能性のあるオブジェクトを取得しているだけですが、サービス層のリポジトリの周りにラッパーを追加することもできますが、サービス層が何であるのか分からなくても無意味なものを埋める危険があります。そのような場合、私はリポジトリをまっすぐ進めることに何の害も見ません。

8

サービス層は必ずしも必要ではありません。単純な状況では、ソリューションを設計するだけです。コントローラがリポジトリを呼び出すことは問題ありません。しかし、コントローラがロジックで膨れ上がっているのを見たり、コントローラの動作を繰り返している場合は、コントローラとリポジトリの間にサービスを置き、コントローラのロジックをコントローラのサービス層に移動してください。

3

オーバーエンジニアリングポイントについては、@Soshと同意します。しかし、私は、コントローラがSOAP/REST経由でそのサービスを再利用する時間が来たときに、あなたのリファクタの作業が非常に少ないという点で、コントローラがサービスを通過するという大きな利点があることを発見しました。これがYAGNIに違反することを覚えておいてください。それは先に(ある程度まで)考えています。

しかし、再びJeffrey Palermo - MVC In Actionの最新の本を読んだ後、彼はゼロロジックのコントローラを持ち、リポジトリと直接話していて、うまく動作します。

+0

ええ、ウェブサービスに関する良い点です。 – UpTheCreek