我试图理解模型上的"胖"和控制器上的"瘦"的概念以及我一直在讨论的内容我有以下示例(这是从freenode讨论中获得的):
问:关于MVC范例,它说Fat模型,瘦的控制器.我在这里想,如果我有很多方法(在控制器上)只使用一些抽象方法到CRUD(在模型上),我是在创建一个胖控制器而不是模型?或者他们说,胖模型,在返回和不打字的内容中进行补偿?这是我从未理解的东西=)任何评论都表示赞赏!非常感谢
OBS1:我没有在模型中做什么,在控制器中,我只有控制最新模型的方法
OBS2:让我们说"checkIfEmailExists()",有"john@hotmail.com"作为参数.这个方法将从模型方法返回,如果这个param存在于表中,则返回boolean.如果是0,"checkIFemailExists()"将调用一个不同的模型方法,这个,他只是另一个抽象方法,执行更新操作.
OBS3:"checkIfEmailExists()",不只是一个控制器?他实际上并没有执行任何CRUD,他只是在比较数值等等.这让我感到困惑,因为在我脑海中这是一个控制器:S
注意:我想这不是最好的例子,因为说"检查是否存在某些东西",听起来像是一个查询我的表操作
Q2:还有一个问题,所以,假设我有一个视图表单,从那里发送该电子邮件地址参数.你是说这个观点直接与模型有关吗?
问题3:控制器不应该在他们之间行动吗?这就是范例
最后注意:讨论结束了,说我错了,希望没问题(我正在学习).但是,那么,Q2和Q3的正确答案是什么?
谢谢你的关注
我刚才在这里问过一些帮助理解MVC,因为我对这个话题很新.我认为我对它有一个很好的理解,这在我最近写的关于这个主题的博客文章中有记录.我的理解基本归结为:
控制器:确定完成请求需要执行的操作,并根据需要使用需要收集/修改的任何模型.它基本上是给定流程的管理者.
观点:仅限演示文稿.一旦控制器收集了它所需要的内容,它就会创建一个特定类型的视图,将信息交给它,并说"然后向用户显示这个视图".
模型:应用程序的行为.当控制器要求它提取或修改某些内容时,它知道如何操作.它还知道触发其他模型执行相关任务(在我的理解中,当模型试图在StackOverflow上"投票"时,该模型知道是否也应该因为它而授予徽章.控制器不会需要关心那个).
我的问题,假设所有这些或多或少准确,实体对象进来的地方?模型和实体是一样的,每个对象都知道如何持久保存自己的数据,或者实体是一个单独的概念,它们自己存在并在整个应用程序中使用?
我的钱是后者,因为这将允许模型独立行动,而所有三个层(模型,视图和控制器)可以利用实体根据需要传递数据.此外,对象和数据库持久性似乎应该分开的关注点.
说实话,我读的MVC越多,我就越困惑.我准备好采取核心概念(从逻辑中单独呈现)并以任何感觉正确的方式运行它,而不必过于担心"MVC"标签.