没有 ORM 的 MVC 不是真正的 MVC?

Posted

技术标签:

【中文标题】没有 ORM 的 MVC 不是真正的 MVC?【英文标题】:MVC without ORM is not real MVC? 【发布时间】:2010-04-17 14:37:10 【问题描述】:

目前我正在将 ORM(学说)集成到 MVC 框架(codeigniter)中。

然后我突然想到这是设置 MVC 的明显方式:

控制器调用代表数据库表的模型。

看这张图:

MVC + ORM

然后我想知道,没有 ORM 的 MVC 怎么可能是真正的 MVC?因为那么模型不是真实的对象,而是执行 CRUD 的不同函数的聚合,然后将结果返回给控制器。而且我猜不需要状态(对象属性),所以函数都是静态的?

如果我错了,请纠正我。

我猜很多人都在使用没有 ORM 的模型。请分享你的想法。你的模型看起来怎么样?

【问题讨论】:

【参考方案1】:

MVC 是最初为 OO 语言构思的通用 UI 模式(我相信 Smalltalk 是第一个)。

如果您没有关系数据库作为后端(例如,二进制序列化文件格式),则不需要 ORM 层。

两者是截然不同的,可以相互独立存在。

【讨论】:

好的,那么我现在明白了,它们是不同的东西。关于我的第二个想法,没有 orm 的模型只是执行 CRUD 的静态函数的集合?不是真正的对象/类? ORM 只是一个从关系数据存储到对象的映射框架:没有隐含的类结构。它可以是静态效用函数的集合,但可以以不同的方式组织。 ORM 的复杂性通常取决于它支持的操作的复杂性(例如批处理、对象依赖关系)以及它描述这些对象的方式的丰富性。【参考方案2】:

MVC 与对象无关。这使得没有 ORM 的 MVC 变得非常简单。

【讨论】:

@Gordon:不,我是认真的。您可以使用 MVC 模式而无需对任何对象进行编程。【参考方案3】:

那些不使用数据库但对其数据使用其他序列化(例如写出 XML 文件)的应用程序呢? MVC 和 ORM 是正交的概念。 MVC 是关于如何组织内部对象交互的,而 ORM 是关于如何序列化和反序列化模型的。您当然可以通过简单地替换不同的序列化方法来使用没有 ORM 的 MVC。

MVC 的控制器部分不是要进行低级调用以进行序列化,而是将视图和模型绑定在一起以创建适当的用户体验和任务流。

【讨论】:

以上是关于没有 ORM 的 MVC 不是真正的 MVC?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 真正使用表单身份验证注销

在 MVC 中,ORM 是不是代表模型?

如何最好地为 Android MVC 应用程序实现一个内聚的模型层?

《精通ASP.NET MVC5》第7章 SportStore:一个真正的应用程序

设计模式MVC(PHP实现二)

你对集群以及负载均衡的了解有多少?