我刚看了一篇博客文章,用银行类比来解释MVC.我有几个月使用MVC框架(CakePHP)进行Web应用程序开发的经验,所以我得到了基础知识,但我开始看到一个主题让我觉得我采用了一种有缺陷的方法来处理逻辑:
在我的应用程序中,模型是厌食症,控制器是肥胖的.我在控制器中有所有业务逻辑,除了模型中的关联和验证规则之外什么也没有.
通过我的控制器扫描,我现在可以识别出许多应该放在模型中的逻辑:
现在问我的问题:
我试图理解模型上的"胖"和控制器上的"瘦"的概念以及我一直在讨论的内容我有以下示例(这是从freenode讨论中获得的):
问:关于MVC范例,它说Fat模型,瘦的控制器.我在这里想,如果我有很多方法(在控制器上)只使用一些抽象方法到CRUD(在模型上),我是在创建一个胖控制器而不是模型?或者他们说,胖模型,在返回和不打字的内容中进行补偿?这是我从未理解的东西=)任何评论都表示赞赏!非常感谢
OBS1:我没有在模型中做什么,在控制器中,我只有控制最新模型的方法
OBS2:让我们说"checkIfEmailExists()",有"john@hotmail.com"作为参数.这个方法将从模型方法返回,如果这个param存在于表中,则返回boolean.如果是0,"checkIFemailExists()"将调用一个不同的模型方法,这个,他只是另一个抽象方法,执行更新操作.
OBS3:"checkIfEmailExists()",不只是一个控制器?他实际上并没有执行任何CRUD,他只是在比较数值等等.这让我感到困惑,因为在我脑海中这是一个控制器:S
注意:我想这不是最好的例子,因为说"检查是否存在某些东西",听起来像是一个查询我的表操作
Q2:还有一个问题,所以,假设我有一个视图表单,从那里发送该电子邮件地址参数.你是说这个观点直接与模型有关吗?
问题3:控制器不应该在他们之间行动吗?这就是范例
最后注意:讨论结束了,说我错了,希望没问题(我正在学习).但是,那么,Q2和Q3的正确答案是什么?
谢谢你的关注
我打算重写一个使用Zend Framework和Twilio的应用程序(用于发送和接收SMS消息).回顾过去,我认为我没有将所有短信功能放在正确的位置.这使得网站升级变得困难.
目前,我有一个SMS控制器来处理来自Twilio的请求(用于传入消息).我实现了一个可以处理各种命令的有限状态机(是的,在一个大动作方法中).响应直接从此控制器发送,也可以从我的控制器管理的模型发送.因此,我最终得到了重复的SMS消息模板,并且对于消息的确切位置感到困惑.
我应该怎么做?是否应该在自己的模型中解析和处理传入的SMS消息?目前,我没有SMS模型 - 只是一个短信控制器.或者,你的建议是什么?
如果重要,我打算用CakePHP重写我的应用程序.
我按照我认为最重要的顺序将它们列在这里.
在阅读了几篇文章后,特别是这篇文章和这篇文章,我开始将控制器中的一些逻辑移到我的模型中.
但是,我无法决定是否将我的搜索逻辑(稍后深入解释)从控制器移动到模型,即使在阅读了更多这样的帖子/文章后:MVC思考,模型与控制器,分离关注点还有更多未列在这里.
视图
两页:
1页包含一个文本字段和提交按钮,该按钮将用户输入作为参数发送到第二页的POST请求中的参数.
第二页简单地渲染给定数组中的每个neatObject,让我们称之为@coolList.
调节器
模型
该NeatObject模型处理来自控制器的请求,并返回neatObjects回到那些控制器.
该NeatObject模型定义之间的关系neatObjects在我们的数据库和其他表.
数据库
这些是根据我们的数据库构成每个neatObject的属性:
控制器如何与模型一起使用以获得用户输入的匹配.
这是我感到困惑的部分.逻辑本身非常简单,但我不确定哪些部件属于模型,哪些部件属于控制器.
控制器是否应将搜索字符串传递给模型,模型会将结果传回?
控制器是否应该向模型询问所有 neatObjects,那么只保留匹配的neatObjects? …