模型在 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 框架中的粒度应该有多粗?的主要内容,如果未能解决你的问题,请参考以下文章