7

在讨论面向 OO 语言的 MVC 时,我看到经常使用的术语好像两者之间存在具体区别。从我从上下文中得到的信息是,业务模型执行一个操作来改变数据模型。这是表达差异的正确方式吗?

我想让我感到困惑的是,大多数模型的例子都混合了这两种角色,而且从表面上看,这样做感觉很自然。通常,更改对象状态的方法位于这些对象本身的内部。我想我很难想出一个例子来说明这在现实世界中是如何工作的。更改对象的方法在该对象内部似乎更自然。任何人都可以更清楚地解释这一点吗?

4

3 回答 3

2

在 MVC 应用程序中,“业务模型”和“数据模型”都可以视为“M”层的子层。它们都与保存和加载数据有关。不同之处在于第一个更接近最终用户看到需求和功能的方式,第二个更接近低级数据库操作。

数据模型层总是更依赖于数据在应用程序中持久化的具体方式。从数据库开始(或者任何你持久化数据的具体方式——它可以是平面文件或 XML),它是第一个、最不抽象的软件层。例如,如果您在应用程序上使用 Oracle RDBMS,则数据模型是您放置任何 Oracle 特性的地方,例如特定的 SQL 语句、连接等。这也是实现原子数据操作(例如,CRUD SQL 语句)的地方)。当然,有一些方法可以减少这一层对给定 RDBMS 的依赖,例如使用某种 ORM 库,如 Hibernate (Java)、NHibernate (.NET) 或 Doctrine (PHP)。

由于如此“低级”,数据模型不应该被应用程序的其余部分直接使用。这就是商业模式的作用。

业务模型被放置在更高的抽象级别。它实现了封装应用程序所需的所有功能需求的服务。

业务模型不应该依赖于特定的 RDBMS——它应该使用数据模型来完成这项工作。另一个区别是它公开了较少粒度的方法——不是 CRUD 的东西,而是更复杂的、业务相关的功能。当然,它也不应该依赖于表示层(视图和控制器)。

例如,基于文字值更改单个员工工资的方法可能属于数据模型(考虑到最终用户不允许使用此类功能)。但是以给定百分比增加所有工资的方法肯定属于业务模型(它可以迭代所有员工,并首先使用“单个员工更新”,数据模型方法来实现此规则) .

但请记住,这是一个“按部就班”的描述——现实世界的场景是不同的。有时我们可能不需要两个不同的数据层——例如,ActiveRecord 模式可以用作数据模型类和业务类。在这种情况下,您可以将两个层混合为一个层 - 但我绝对不建议在更复杂的场景中采用这种方法。

于 2010-09-24T16:57:08.780 回答
1

MVC 实现中的模型是或应该是业务模型。

业务模型描述了与应用程序相关的业务实体的行为和属性。当您对此进行编码时,实体将成为类,而行为和属性最终将分别成为这些类的方法和属性。

应用程序需要在某个地方存储其信息。如果内存是无限的,我们就永远不会停电,我们的操作系统也永远不需要重启,那么商业模式就足够了。然而,在现实世界中,我们需要将类的属性存储在它们可以在应用程序和/或计算机关闭后仍然存在的地方。

因此,业务模型需要并使用某种类型的数据存储。这种数据存储的组织方式是数据模型。在大多数情况下,关系数据库是首选的数据存储,数据模型通常是关系数据库的设计。

虽然数据模型可以处于逻辑级别,然后更类似于 OO 业务模型,但在这种情况下,我们通常谈论的是逻辑模型的技术实现。(一个关键区别:逻辑模型允许表之间有 MN 关系,规范化的技术模型将有一个链接表,它与两个原始表有 N-1 关系)。

业务模型的 OO 特性并不直接映射到规范化的表和列设计。ORM(对象-关系-映射)库通常用于将类的属性映射到关系数据库中的表和列。

由于业务模型使用数据存储和数据模型,并且它们一起构成 MVC 实现中的模型,因此它们之间的区别通常变得模糊。我认为非常值得在你的脑海中清楚地记住他们各自的角色。它有助于决定逻辑应该去哪里。

例如,与 rsenna 的回答相反,我会满足于更改单个员工的薪水仍然是业务模型的函数,即使将其更改为字面值,因为业务模型可能定义各种制衡,验证和其他业务规则来更改员工的薪水。例如,企业可能有规定,工资变化不得超过 x%,不得超过 CEO 的工资,遵守工会规则等。

尽管以数据库为中心的开发人员和许多 dba 会不同意,但这些规则属于业务模型,而不是数据模型。DBa 更喜欢在数据模型中使用它们,可能是因为业务模型通常以某种编程语言和数据库中的数据模型实现,而 dba 喜欢保持他们的数据库良好、有效和一致。

我想说规则仍然是业务模型的一部分,而不是数据模型,但您当然可以始终选择在触发器和存储过程中实现它们(也)。业务模型的规则在哪里实施是一个问题……,很好的实施,细节。

于 2010-09-24T18:24:27.370 回答
0

业务模型包括数据流如何在业务功能中移动。这没有考虑数据模型,但有助于指导数据的存储方式。

数据模型是在考虑数据的情况下构建的——业务模型的逻辑基于流程/程序/只是事情的完成流程,数据模型旨在以最规范化的方式构建数据,这将反映商业模式的需求。

于 2010-09-24T16:47:40.443 回答