いつ独自のコントローラーで機能を利用できるようにする必要がありますか?
-
26-09-2019 - |
質問
私はさまざまなページにグラフを表示する必要がある Web アプリケーションに取り組んでいます。各ページはコントローラーに対応し、チャートを必要とする各コントローラーには ChartService へのインターフェイスがあります。このサービスは、サードパーティ ベンダーにチャートを要求します。次に、JavaScript を使用して HTML にラップされた画像を文字列として出力ストリームに直接返します。ChartService には、データと、期間やテンプレート ファイルなどのその他のパラメーターを指定する必要があります。
グラフ作成機能を独自のコントローラーに抽象化する必要がありますか?異なるタイプのチャートはそれぞれ、ChartController の異なるアクション メソッドによって提供されます。
しかし、複数のコントローラーから一部のページを提供することは問題でしょうか?機能に独自のコントローラーを与える必要がある場合を決定するためのガイドラインは何ですか?
解決
あなたのようなサウンドは、すべてでは何も変更する必要はありません。お使いのコントローラがその特定のサービスに直接依存しないようにするには、ラッパーのサードパーティのサービスの内部を抽象化しました。この場合には新しいコントローラを作成するラッパーのラッパーを作成するに達するでしょう。
あなたは、アプリケーションに動作を追加したい場合、新しいコントローラを作成します。
他のヒント
デイブ、
メインコントローラーが継承する抽象ベースコントローラーが必要です。基本コントローラーには必要な機能がすべて備わっており、子コントローラーが適切な部分をオーバーライドします。あなたのジレンマの完全なコンテキストがわからないと、これは実行可能な(または望ましい)アプローチであるかどうかはわかりませんが、現時点ではすべてのコントローラーで私が採用しているアプローチです。
[編集] - このアプローチの利点は、運が良ければ、ベースコントローラーの機能の 75% が残り、機能の 25% のみがオーバーライドされるか、子コントローラー用にオーダーメイドの機能が追加されることです。これにより、新しいチャート タイプごとに、潜在的に同一のアクション メソッド名を持つ独自のモデル/コントローラーが存在するため、非常にクリーンなパラダイムが得られ、新しいチャート タイプの「エントリ」コストが非常に安くなります。
ジム
IMOは、
のようなURLの持つ "グラフ作成" のセクションを持っている場合charts/income
charts/expenditure
は、次にチャートコントローラは、理にかなっています。例えば、あなたのチャートのコントローラは、さまざまなページからAJAXのクエリによって排他的に呼び出された場合も、その後、chartingControllerはまだ理にかなっています。しかし、あなたのようなURLを持っているつもりなら、
products/list
products/yearlyStockChart
employees/details
employees/performanceChart
その後、あなたは、両方のコントローラがchartingServiceを利用して、リスト()とyearlyStockChartとProductsController()アクション、および詳細をemployeesController()とperformanceChart()アクションをしたいと思います。