5

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

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

  1. 何时使用自定义控件与开箱即用的站点核心控制器?
  2. 开箱即用控制器何时被调用?
  3. 自定义控件与开箱即用控制器的优势?
  4. 如果我们采用开箱即用的方式,我们是否应该在视图中包含所有业务逻辑。这是可测试的吗?

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

任何帮助将不胜感激。

4

2 回答 2

11

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

  • 页面级控制器(由项目路由调用)
  • 组件级控制器(由重新渲染机制调用)

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

页面级控制器

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

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

组件级控制器

对于ViewRenderingSitecore 而言,无需特定控制器即可呈现 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 回答