ContentPartRecord 和常规 MVC 模型对象有什么区别?

What is the difference between ContentPartRecord and regular MVC model object?

我对 ContentPart 和常规 MVC 模型对象之间的区别感到相当困惑。

我正在学习 PluralSight 高级果园课程。 它介绍了如何创建 MovieContentPart 和 Actor 对象。 我了解到 MoviceContentPart 有一个电影片段记录关联数据库中的记录 table。 然而,Actor 对象也可以在 Orchard 方法之外做同样的事情。

那么使用 Orchard 方法的好处是什么?

A ContentPart 和常规 MVC 模型是非常相似的概念。看待 Orchard 的一种方式是将其视为基于 MVC 的组合引擎。让我解释一下...

在传统的 MVC 应用程序中,您有一个非常简单的管道:请求进入,路由到控制器操作,控制器操作使用请求构建模型,然后 return 结果通常是用于将视图模型移交给视图。然后将视图呈现的 HTML 发送到浏览器。这是一种简化,但这是一般的想法。

就 Orchard 而言,许多不同的模块将对任何一个页面做出贡献。有一个控制器,但它在 Orchard 的深处,你不应该关注它(在典型情况下)。该模型实际上是由所有这些模块在协作和解耦过程中动态组成的。

Orchard 之所以需要以这种方式做事,是因为认识到大多数内容都是由可组合的小部分组成的。例如,博客 post 由标题、body、slug、作者、标签列表和评论(它们本身是由以下部分组成的内容项组成:标题、作者、文本等)。

这些部分中的每一个都来自某个模块,并由 "part driver" 管理,这实际上是您拥有的最接近控制器的东西,但它在部分级别起作用,即对 Orchard 有意义的一个,比请求更有意义。 driver 负责从该部分创建一个 "shape",这类似于创建视图模型的一部分。该形状稍后将由模板(视图的一部分)呈现,生成的 HTML 将组成更大的页面以发送到浏览器。

总而言之,Orchard 模型相对于普通 MVC 应用程序的优势在于,它不是一个简单的请求 -> controller-action -> 视图管道,而是一个更丰富、可组合、并行且非常解耦的管道管道从可重用部分呈现页面。这并不总是合适的,这就是为什么 Orchard 仍然允许通过模块实现简单的控制器,但是对于 content-based 网站或网站的部分,它非常强大并且允许更困难的高级场景在传统 MVC 应用程序中从头开始实施。