MVCのコントローラーのパーシャルクラスを作成できますか?コントローラーの部分クラス
理由:あまりにも多くのコードを含むコントローラがあります。このコントローラーにはさまざまなレポートのコードが含まれており、コードが多すぎるためコードの可読性が低下します。すべてのレポートでコントローラの名前を同じにしておきたいので、さまざまなレポートのコードを配布したいと思います。
もし私が他の方法で私に知らせてくれればいいですか?
おかげ Alokシャー
MVCのコントローラーのパーシャルクラスを作成できますか?コントローラーの部分クラス
理由:あまりにも多くのコードを含むコントローラがあります。このコントローラーにはさまざまなレポートのコードが含まれており、コードが多すぎるためコードの可読性が低下します。すべてのレポートでコントローラの名前を同じにしておきたいので、さまざまなレポートのコードを配布したいと思います。
もし私が他の方法で私に知らせてくれればいいですか?
おかげ Alokシャー
はい、あなたは部分クラスを使用することができます - コンパイラは一つだけを生成するためにコンパイル時にそれらのすべてをマージします。
しかし、あなたはコードを配布したいと言います - コードが複数のプロジェクトに入る場合、部分的なものは助けにならないでしょう。
あなたが代わりに必要なアクションメソッドを持つクラスライブラリプロジェクトにSystem.Web.Mvc.Controller
から継承ベースのコントローラクラスを(作成した後、単に別のコントローラにルーティング似たURLへのルーティングを使用することができます。Here's a link to the Asp.Net Tutorial 'Creating Custom Routes'そのために役に立つかもしれません。
使用する必要のあるWebアプリケーションですが、これは基本的なことですが、すべてをカバーしているわけではありません。これらのオブジェクトは、再配布可能なものから継承するコントローラを持つだけです。さらに、仮想メソッドなどを使用して拡張ポイントを作成できるようになりました。さまざまなWebアプリケーションがカスタマイズする必要があるこれらのレポート。だから、
"Reports/Customers"
できOrdersReportsController
からCustomerReportsController
と"Reports/Orders"
可能性をルーティングするためのルート:
routes.MapRoute("CustReports",
"Reports/Customers/{action}",
new { controller = "CustomerReports", action = "Index", id = "" });
routes.MapRoute("OrderReports",
"Reports/Orders/{action}",
new { controller = "OrdersReports", action = "Index", id = "" });
これは、この問題に対する最も単純なアプローチである - しかし、私はAreasを使用してだと思うが(リンクはMSDNのチュートリアルにある)ほとんどのだろうおそらくは適用される可能性があります。その場合は、デフォルトのルートがそれをすべて実行するため、ルーティングをまったく使用する必要はありません。
もちろん!
パーシャルクラスは、C#言語の機能であり、MVCやその他の使用しているフレームワークとは無関係です。
..それは私もコントローラの部分クラスを作成できることを意味します。右? –
これは正しいです:) –
はい。部分クラスは実際には言語の機能に過ぎず、コンパイルされたクラスは他のクラスと同様に通常の.NETクラスです。
あなたは懸念の適切な分離を確保するために、複数のコントローラにコントローラを分割しているのに、私はお勧めし(複数のファイルにそれを分割する必要があるので、大きいクラスを持つきっとsmell bad。)
」私は他の方法で行うことができる場合よりは、私に知らせてください」
方法について:
コントローラを別々のクラスに分割する必要はありません。欠点は、これが概念化して実装するのに妥当な時間がかかることですが、より良いコードベースで終わることになります。
私はあなたに追いつくことができません。サンプルコードまたはサンプルアプリケーションを私に提供してもらえますか? –
ここでの難しさは概念化されています - 私は実際にあなたにサンプルアプリケーションを与えることはできませんが、私はあなたに(より良い言葉で)記述したことのまともな説明と例を指摘することができます - http: /www.mikesdotnetting.com/Article/117/Dependency-Injection-and-Inversion-of-Control-with-ASP.NET-MVC – SpaceBison
+1、素敵なアイデア! –
@Andras:サンプルコードやリファレンスリンクはありますか?私は決してカスタムルーティングをしなかったので、それについては何も考えていません。 –
@alok_didaが更新されました。 –