2013-02-19 75 views
4

我一直在閱讀大量的博客上MVC提供的位置: http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog.aspxMVC控制器與出的現成Sitecore的控制器

不過,我不能夠解釋/便於學習自己/團隊:

  1. 何時使用自定義控件與開箱即用站點核心控制器?
  2. 什麼時候Out of Box Controller被調用?
  3. 自定義控制與出箱控制器的好處?
  4. 如果我們開箱即用,我們是否應該在視圖中包含所有業務邏輯。這是可測試的嗎?

我也看了低於,但仍不能確定的: https://bitbucket.org/demoniusrex/launch-sitecore-mvc-demo

任何幫助將不勝感激。

回答

10

雖然我大致與凱文Obee利用的說法,我認爲這是值得提醒自己的是,在Sitecore的兩個截然不同的角色正在使用的控制器:

  • 頁級控制器(按項目路線調用)
  • 組件級控制器(由redering機制調用)

何時使用:自控制器/默認Sitecore的控制器

頁面級別控制器

匹配的任何一個項目的路徑將默認使用的Sitecore.Mvc.Controllers.SitecoreControllerIndex行動路線。此操作將根據項目的佈局配置返回ViewResult。

如果您需要更改此行爲(例如影響整個頁面的行爲),您可以指定項目上的自定義控制器和操作(或項目的標準值)。對於自定義控制器,您可以自定義控制器或繼承默認控制器。

組件級控制器

對於ViewRendering Sitecore的呈現,而無需剃刀意見爲特定的控制器(嗯,我想它的頁面級控制器是在玩 - 但試想一下,Sitecore的提供了一個默認的控制器使用mvc.getModel管道獲取模型並將其提供給Razor視圖)。

對於ControllerRendering您提供了一個可以執行邏輯的自定義控制器(請參閱凱文的答案)併爲該視圖提供模型。子類Sitecore.Mvc.Controllers.SitecoreController沒有任何好處。

何時控制器調用

頁面級別控制器

頁面級控制器上的動作是由路由引擎調用。

組件級控制器

作爲頁面視圖呈現上的ControllerRendering動作被調用。

使用效益:自定義控制器/默認Sitecore的控制器

在默認Sitecore的控制器定製控制器的好處是,你在邏輯控制。使用默認的Sitecore控制器的好處是Sitecore爲您提供邏輯。

我們應該包括瀏覽

號(見凱文的答案)

+0

謝謝herskinduk – 2013-03-10 08:03:47

7

我個人認爲,業務邏輯應該放在從控制器類調用的命令和查詢類中。從這些調用中,您可以組裝一個強類型視圖模型,該模型將被傳遞到啞剃刀視圖進行渲染。

確保控制器依賴的任何服務通過使用合約(接口)而不是具體類的構造函數注入傳遞給它,並且您最終得到的是單元可測試的解決方案。

+0

謝謝凱文OBIEE,能否請你幫闡述第一段即命令查詢類==業務邏輯所有的業務邏輯?任何你可以分享甚至僞代碼的例子都會有所幫助 – 2013-02-20 11:54:03

+1

目的是讓控制器不會成爲業務邏輯的傾倒地。 Jimmy Bogard在稀釋控制器方面進行了廣泛的討論,他錄製的演講既具有教育意義又具有娛樂性。命令查詢隔離原則值得尊重,最終會得到鬆散耦合且易懂的體系結構。 – 2013-02-20 21:14:00

+0

命令查詢分隔 - http://en.m.wikipedia.org/wiki/Command%E2%80%93query_separation – 2013-02-21 08:03:00