模型在 MVC 框架中的粒度应该有多粗?

Posted

技术标签:

【中文标题】模型在 MVC 框架中的粒度应该有多粗?【英文标题】:How coarse grained should the model be in an MVC framework? 【发布时间】:2011-01-16 14:19:12 【问题描述】:

我一直在阅读之前提出的几个问题,但我还没有遇到一个能以“黑白”方式回答我的问题的问题!因此,如果这是重复的,请道歉。这个问题可能类似于问“一根绳子有多长”,但请耐心等待!

对于注册系统,我有一个具有以下功能的用户模型:

添加用户 删除用户 activate_user

上述用户模型处理一张表。 mysql 数据库中的 users 表。

您可以猜测每个函数的作用,但这是否足够粗略?我的意思是我的模型是否应该包含更广泛的方法,例如:

添加记录 删除记录 update_record

我在哪里传入表和要删除、添加或更新的记录的唯一标识符?

我正在使用 codeigniter,但我对如何在纯 MVC 框架中完成工作很感兴趣。

如果这个问题太挑剔,我深表歉意。

谢谢大家

【问题讨论】:

【参考方案1】:

我不确定你所说的“粗”是什么意思。

“我的模型是否应该包含更广泛的方法,例如:add_record、delete_record、update_record”

绝对不是。绝不。这违背了拥有模型的目的。

这种“通用”的东西就是数据库的用途。模型的重点是使通用数据库适应您的特定问题。

您的模型应该针对您的问题。

“具有以下功能的用户模型:add_user、delete_user、activate_user”这就是重点。您的模型反映了您的应用程序、问题域和解决方案。

您的模型应该能够——实际上——独立存在。您应该能够将模型包装在命令行应用程序或 GUI 应用程序或网页中。

【讨论】:

+1 很多人似乎认为模型应该做的就是 CRUD。这意味着控制器需要参与到应用程序的业务逻辑中。之所以称为模型,是因为它为您的问题建模 - 您在问题域中的任何操作都需要模型上的方法 验证也应该出现在模型中,并且向控制器报告是否有错误。 @DGM 那么控制器的工作只会变成加载模型/视图,就这样? @Abs:正确。控制器只是表示(或视图)和模型之间的一点粘合剂。它将 GUI 操作附加到模型方法。它将模型值复制到视图以进行演示。就是这样。 差不多...它将请求连接到正确的模型,并根据模型的响应和请求参数,将其连接到正确的视图。【参考方案2】:

你可以猜出每个函数的作用 但这是否足够粗糙。我是说 我的模型是否应该包含以下方法 范围更广,例如:

* add_record
* delete_record
* update_record

我在表格中传递的地方和一个独特的 要删除的记录的标识符, 添加还是更新?

如果您只需要获取用户的信息,不一定要使用整个记录,那么您可以使用*_user 函数,但仅将其包含在您的用户模型中。

如果您需要获取整条记录而不仅仅是用户,那么拥有*_record 函数也是合适的,但将其放在您的记录模型中 - 而不是在您的用户模型中。

这里要记住的是,不要将所有这些功能都包含在一个模型中。简单地说,你的用户和记录是一样的。

【讨论】:

以上是关于模型在 MVC 框架中的粒度应该有多粗?的主要内容,如果未能解决你的问题,请参考以下文章

您应该在控制器中处理会话数据还是在 MVC 框架的模型中处理会话数据?

实用程序类可以是 MVC 框架中的模型类吗?

手撸一个mvc框架有多简单

Symfony2 和其他 MVC 框架中的模型?

MVC框架是什么

mvc模型和mvc框架的区别