2

初期状況:

階層化されたアーキテクチャで MVC3 アプリケーションを構築したいと考えています。レイヤーは、永続レイヤー (リポジトリ パターン)、サービス レイヤー、およびビュー レイヤーになります。また、エンティティを永続レイヤーの DTO にマップし、これらの DTO をビューに渡したいと考えています。

ビューでは、MVC3 weapp を使用して MVC パターンを適用したいと考えています。今私の質問は、どのモジュール、コントローラー、またはモデルがサービスレイヤーにアクセス(参照)する必要があるかです。次のように、コントローラーのサービスレイヤーへの参照を常に確認します。

public class CustomerController
{
 public ViewResult Details( int id )
    {
       CustomerDTO customerDto = MyService.GetCustomerById();
       return View( customerDto );
    }
}

Model モジュールのサービス層にアクセスするべきではないですか? コントローラーでサービス レイヤーにアクセスする場合、Model モジュールはまったく必要ありません...?

4

2 に答える 2

6

私は常に、サービス層での実際の作業はすべてコントローラーで行われることに基づいて作業しています。

コントローラーでサービス レイヤーにアクセスする場合、Model モジュールはまったく必要ありません...?

不正解 -サービス タイプが正しい形状とメタデータ (属性など) を持っているか、持っている必要があるか、MVC ビューで正しく機能する可能性はほとんどありません。ビューに与えられるすべてのオブジェクトには、たとえそれらがサービス タイプの 1 対 1 のクローンであっても、Model タイプが必要です。これは、ビューとコントローラーが必要とするデータとサービスが分離されているためです。種類。[Display][DataType]

ビューをサービス タイプに直接バインドしようとすると、次の 2 つのシナリオのいずれかが作成されます。

  • 送受信されるデータがサービス タイプに準拠する必要があるため、ビューとコントローラーのコードを変更するのが難しくなります。
  • すべてのビューを変更することになるため、サービスの種類を変更するのが難しくなります。

(ViewModelまたはModel、あなたの視点に応じて) は、表示に適したもの (Web ページに表示する) とバインド (Web ページから受信する) の間のアダプターです。ビジネス ロジック レベルで使用される実際のサービスタイプ彼らは異なる問題を解決することを目指しているので、確かにそうすべきです。

于 2012-12-19T17:44:36.013 に答える
1

コントローラーから MyService を非表示にするかどうかによって異なります。

あなたの例ではそれが見えます。Model に同じ名前のメソッドがあり、それが MyService に委任された場合、それはそうではありません。

非表示にする利点は、View レイヤーと Controller レイヤーに影響を与えることなく MyService を YourSevice に交換できることです。

モデルはなし。では、どこで DTO を定義していますか? 基本的に MyService がモデルになります。

また、少なくとも 1 つの他のレイヤーを追加する場合でも、モデルからコントローラー、ビューへの DTO がずっと同じであるという前提で操作しています。

私があなただったら、その仮定を考えてみます...

于 2012-12-19T17:56:12.273 に答える