5

私はここで提供されるMVCに関する多くのブログを読んでいます: http ://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog.aspx

しかし、私は自分自身/チームを説明/納得させることができません:

  1. カスタムコントロールとすぐに使用できるサイトコアコントローラーをいつ使用するのですか?
  2. Out of Box Controllerはいつ呼び出されますか?
  3. カスタムコントロールとすぐに使えるコントローラーのメリットは?
  4. 箱から出して行く場合、ビューにすべてのビジネスロジックを含める必要があります。これはテスト可能ですか?

私も以下を見ましたが、まだわかりません: https ://bitbucket.org/demoniusrex/launch-sitecore-mvc-demo

どんな助けでもありがたいです。

4

2 に答える 2

11

私はKevinObeeの声明に広く同意しますが、コントローラーがSitecoreで2つの異なる役割で使用されていることを思い出しておく価値があると思います。

  • ページレベルコントローラー(アイテムルートによって呼び出されます)
  • コンポーネントレベルコントローラー(リダリングメカニズムによって呼び出されます)

使用する場合:カスタムコントローラー/デフォルトのSitecoreコントローラー

ページレベルコントローラー

アイテムパスに一致するルートは、デフォルトで。のIndexアクションを使用しますSitecore.Mvc.Controllers.SitecoreController。このアクションは、アイテムのレイアウト構成に基づいてViewResultを返します。

この動作を変更する必要がある場合(たとえば、ページ全体に影響を与えるもの)、アイテム(またはアイテムの標準値)に対するカスタムコントローラーとアクションを指定できます。カスタムコントローラーの場合は、独自のコントローラーをロールするか、デフォルトのコントローラーをサブクラス化することができます。

コンポーネントレベルコントローラー

Sitecoreの場合ViewRendering、特定のコントローラーを必要とせずにRazorビューをレンダリングします(実際に使用されているのはページレベルのコントローラーだと思いますが、Sitecoreがmvc.getModelパイプラインを使用してモデルを取得し、それをにフィードするデフォルトのコントローラーを提供していると想像してください。かみそりのビュー)。

ControllerRenderingロジックを実行できるカスタムコントローラーを提供し(Kevinの回答を参照)、ビューのモデルを提供します。サブクラス化によるメリットはありませんSitecore.Mvc.Controllers.SitecoreController

コントローラはいつ呼び出されますか

ページレベルコントローラー

ページレベルコントローラのアクションは、ルーティングエンジンによって呼び出されます。

コンポーネントレベルコントローラー

ControllerRenderingのアクションは、ページビューのレンダリング時に呼び出されます。

使用のメリット:カスタムコントローラー/デフォルトのSitecoreコントローラー

デフォルトのSitecoreコントローラーに対するカスタムコントローラーの利点は、ロジックを制御できることです。デフォルトのSitecoreコントローラーを使用する利点は、Sitecoreがロジックを提供することです。

ビューにすべてのビジネスロジックを含める必要があります

いいえ(ケビンの答えを参照)

于 2013-02-21T09:57:52.323 に答える
7

私の個人的な見解では、ビジネスロジックは、コントローラークラスから呼び出されるコマンドクラスとクエリクラスに配置する必要があります。これらの呼び出しから、レンダリングのためにダムレイザービューに渡される強く型付けされたビューモデルを組み立てることができます。

コントローラが依存するすべてのサービスが、具象クラスの代わりにコントラクト(インターフェイス)を使用したコンストラクタインジェクションを介して渡されることを確認し、ユニットテスト可能なソリューションを完成させる必要があります。

于 2013-02-20T09:08:12.420 に答える