MVC控制器与开箱即用的Sitecore控制器

Nil*_*Pun 4 asp.net-mvc sitecore sitecore6

我一直在阅读很多关于MVC的博客:http: //www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog.aspx

但是,我无法向自己/团队解释/说服:

  1. 何时使用自定义控件与开箱即用的站点核心控制器?
  2. 何时调用Out of Box控制器?
  3. 自定义控制与开箱即用控制器的优势?
  4. 如果我们开箱即用,我们是否应该在Views上包含所有业务逻辑.这可以测试吗?

我也看了下面但仍然不确定:https: //bitbucket.org/demoniusrex/launch-sitecore-mvc-demo

任何帮助将不胜感激.

her*_*duk 10

虽然我大致同意Kevin Obee的陈述,但我认为值得提醒自己,在Sitecore中,控制器被用于两个不同的角色:

  • 页面级控制器(由项目路由调用)
  • 组件级控制器(由redering机制调用)

何时使用:自定义控制器/默认Sitecore控制器

页面级控制器

默认情况下,任何与项目路径匹配的路径都会使用该Index操作Sitecore.Mvc.Controllers.SitecoreController.此操作将根据项目的布局配置返回ViewResult.

如果您需要更改此行为(例如,影响整个页面的内容),您可以在项目上指定自定义控制器和操作(或项目的标准值).对于自定义控制器,您可以自己滚动或子类化默认控制器.

组件级控制器

对于ViewRenderingSitecore渲染Razor视图而不需要特定的控制器(我猜它是正在使用的页面级控制器 - 但是想象一下Sitecore提供了一个默认控制器,它使用mvc.getModel管道获取模型并将其提供给剃刀观点).

ControllerRendering您提供可以执行逻辑的自定义控制器(请参阅Kevin的答案)并为视图提供模型.子类化没有任何好处Sitecore.Mvc.Controllers.SitecoreController.

何时调用控制器

页面级控制器

页面级控制器上的操作由路由引擎调用.

组件级控制器

在页面视图呈现时调用ControllerRendering上的操作.

使用的好处:自定义控制器/默认Sitecore控制器

自定义控制器优于默认Sitecore控制器的好处是您可以控制逻辑.使用默认Sitecore控制器的好处是Sitecore为您提供逻辑.

我们是否应该在Views上包含所有业务逻辑

不.(见凯文的回答)


Kev*_*bee 7

我个人认为,业务逻辑应该包含从控制器类调用的命令和查询类.从这些调用中,您可以组合一个强类型视图模型,该模型将传递给哑镜剃刀视图以进行渲染.

确保控制器所依赖的任何服务都是通过使用契约(接口)而不是具体类的构造函数注入传递给它的,并且最终应该得到可单元测试的解决方案.