MVC 模式与三层 - 逻辑属于哪里?

Posted

技术标签:

【中文标题】MVC 模式与三层 - 逻辑属于哪里?【英文标题】:MVC pattern vs Three tier - where does logic belong to? 【发布时间】:2014-03-16 18:38:07 【问题描述】:

我试图在我的网站编码中引入一些好的实践,所以我开始研究 MVC,因为它是网站设计中的一个流行词 :-) 不过我对 MVC 模式感到困惑。我习惯于在Three-tier pattern 中思考,那里有 3 层:

演示文稿 逻辑 数据

有两件事让我对 MVC 感到困惑:

    “模型”组件通常表现为上面的数据层(数据库抽象)。但是“高级”逻辑属于哪里?比如决定你将如何处理数据以及如何处理、检查权限等。有时我在控制器中看到了一些这样的内容,但我很难确定哪个属于哪个位置。

    MVC 模式is presented 是一个由 3 个组件组成的圆圈,它们相互发送消息,例如 M -> V、V -> C、C -> M,反之亦然。我完全理解三层设计,其中一层调用自身下面的层,但不是相反!你的编程语言中的函数可以调用其他函数(你可以称之为“发送消息”)——但它是一个面向树形图。但是下层如何,或者说,被调用函数如何“发送消息”或“通知”调用函数呢?

也许我对 MVC 模式太关心了,可以愉快地坚持我的三层设计吗?无论如何,我想了解 MVC 模式,至少看看它是否值得我使用。

【问题讨论】:

看看这个解释对你有没有帮助 - intstrings.com/ramivemula/articles/… 【参考方案1】:

模型是表达您的领域知识的另一种方式,您的控制器应该决定显示、更新、创建哪些模型,而您的视图应该只呈现控制器决定呈现的数据。为了解决您的第二个问题,模型通常通过控制器传递给视图,以呈现数据。

有关更多详细信息,请向下滚动此 page 的模型视图控制器部分

【讨论】:

“您的控制器应该决定要显示、更新、创建哪些模型” - 这意味着您将所有高级逻辑都放在控制器中 - 因为它必须决定是否必须创建、更新或......对于大多数网站来说,这个逻辑非常简单,但对于我的应用程序来说,这将是一个不平凡的逻辑。所以,正如你解释的那样,模型只是一个纯粹的“数据库层”和“待展示数据”的内容? 您比我更了解您的域。在我的情况下,很多时候模型有很多计算和逻辑,这些计算和逻辑并不简单,但这是我的领域固有的。如果决定将哪个对象推送到页面的逻辑很重要,那么它很重要,你应该很高兴控制器和模型一样容易测试。我唯一担心的是当人们说他们的视图具有非平凡的逻辑时。这对我来说是一个危险信号。阅读 Fowler 页面并具体化您的想法,但拥有非平凡的控制器逻辑不是问题。

以上是关于MVC 模式与三层 - 逻辑属于哪里?的主要内容,如果未能解决你的问题,请参考以下文章

浅析MVC模式与三层架构的区别

MVC模式和三层架构

MVC模式与三层架构的区别

JAVA的三层架构是啥样的?

三层架构和mvc模式有啥关系

mvc与三层结构