コントローラがリポジトリを直接呼び出す必要があるか、または常にサービスレイヤを介して実行する必要がありますか?それとも他の選択肢がありますか?ASP.NET MVC - リポジトリ/サービス/コントローラ
答えて
あなたがサービスレイヤを持っていて、ビジネスロジックをリポジトリから(サービスレイヤの場合のように)抽象化して使用している場合、コントローラはそのサービスを呼び出すだけでよいメソッド。サービスレイヤは、レポへのカップリングになります。
さらに、Mayoの回答:モデルは、アプリケーション(レポ、サービス、UI /コントローラ)全体に渡されるデータクラスであるため、他のレイヤと同様にUI/Webレイヤがその上で動作する必要があります。
私はあなたがFowler's definitionの文脈とmodern aspnet mvcadaptionsでサービス層を実装する場合、あなたはあなたのサービス層から「肉のビジネス・ロジックを呼び出し、非常に小型で軽量な方法として設計され、あなたのコントローラのアクションを持つべきだと思います。
編集:私はちょうどあなたが使用を行うケースに関連する質問の一部に答えるためにしようと、サービス層が唯一のオプションですを持つを言っていません:私は私が明確ではなかったと思いますサービス層。特に、小規模なプロジェクトでは、サービスレイヤーは必ずしも必要ではないと言いました。
私が作業してきたすべての例は、コントローラがモデル上で動作すべきであることを示唆しているようです。
私は、モデルがビジネスロジックからデータリポジトリまで(モデルとみなされるビジネスオブジェクトクラスとは対照的に)のすべてから構成されていることを著者が示唆していると聞きました。
個人的には、コントローラをリポジトリに対して動作するクラスで動作させることで、クリーンで一貫性を維持しようとしますが、難しい/速いルールがあるとは思いません。
コントローラーは、ユーザー入力を解釈し、Viewで使用するモデルを準備します。理解しています。いくつかの人々は真剣にモデルから論理のすべてのビットを削除することについて真剣ですが、私はそれについて肛門ではない。
IMHOは、DIを使用してコントローラ内からリポジトリにアクセスすることです。
私はあなたがメーンですか? "コントローラからのすべてのビット"、 – LiamB
ええと、いいえ、モデルからのすべてのビット。モデルはNOTHINGを行いますが、ユーザーの入力/要求に応じてCONTROLLERが収集したデータを格納します。 – Will
これは「貧血モデル」であり、大部分の人にとっては非常に良い習慣とはみなされません。http://en.wikipedia.org/wiki/Anemic_Domain_Model – UpTheCreek
サービスレイヤは、基本的にビジネスロジック/ビジネスモデルのAPIです。たとえば、あなたの「最良の顧客」を得るための方法があるかもしれません。サービス層は、リポジトリを照会し、実行する必要のあるロジックを実行し、顧客を返却するために必要な処理を行います。そのような場合は、常にサービス層を通過する必要があります。
場合によっては、ビジネスモデルではなくビューモデルにある可能性のあるオブジェクトを取得しているだけですが、サービス層のリポジトリの周りにラッパーを追加することもできますが、サービス層が何であるのか分からなくても無意味なものを埋める危険があります。そのような場合、私はリポジトリをまっすぐ進めることに何の害も見ません。
サービス層は必ずしも必要ではありません。単純な状況では、ソリューションを設計するだけです。コントローラがリポジトリを呼び出すことは問題ありません。しかし、コントローラがロジックで膨れ上がっているのを見たり、コントローラの動作を繰り返している場合は、コントローラとリポジトリの間にサービスを置き、コントローラのロジックをコントローラのサービス層に移動してください。
オーバーエンジニアリングポイントについては、@Soshと同意します。しかし、私は、コントローラがSOAP/REST経由でそのサービスを再利用する時間が来たときに、あなたのリファクタの作業が非常に少ないという点で、コントローラがサービスを通過するという大きな利点があることを発見しました。これがYAGNIに違反することを覚えておいてください。それは先に(ある程度まで)考えています。
しかし、再びJeffrey Palermo - MVC In Actionの最新の本を読んだ後、彼はゼロロジックのコントローラを持ち、リポジトリと直接話していて、うまく動作します。
ええ、ウェブサービスに関する良い点です。 – UpTheCreek
- 1. Asp.Net MVCとAsp.Net両コアMVC
- 2. ASP.NET MVCで@Transactional in ASP.NET MVC
- 3. ASP.Net VS ASP.Net MVC
- 4. Spring MVCとASP.NET(MVC?)
- 5. asp.net MVCのカスタムタグMVC
- 6. ASP.NET 4.0対ASP.NET MVC
- 7. asp.net WebForms&asp.net MVCセキュリティオプション
- 8. ASP.NET MVCとAngularjsとASP.NET MVCとReactjs
- 9. ASP.NET MVC 3は、Asp.net MVC 3ではデータベース
- 10. ASP.NET MVC
- 11. asp.net mvc
- 12. asp.net mvc
- 13. asp.net MVC
- 14. asp.net mvc
- 15. ASP.NET MVC
- 16. asp.net MVC
- 17. MVC ASP.NET
- 18. ASP.NET MVC
- 19. asp.net MVC
- 20. asp.net mvc
- 21. asp.net mvc
- 22. ASP.NET MVC
- 23. asp.net MVC
- 24. asp.net mvc?
- 25. asp.net MVC
- 26. asp.net mvc
- 27. asp.net mvc
- 28. asp.net mvc
- 29. asp.net mvc
- 30. MVC 3のASP.NET MVC 4テンプレート
+1サービス層のリンク – Mayo