2013-02-19 46 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