Model view controller 胖模型、瘦控制器和MVC设计模式

Model view controller 胖模型、瘦控制器和MVC设计模式,model-view-controller,cakephp,model,controller,Model View Controller,Cakephp,Model,Controller,我刚刚读了一篇文章,用银行业的类比来解释MVC。我有几个月使用MVC框架(CakePHP)开发web应用程序的经验,因此我掌握了基本知识,但我开始看到一个主题,这让我觉得我在使用有缺陷的方法来实现我的逻辑: 胖模特,瘦控制器 在模型中保留尽可能多的业务逻辑 在我的应用程序中,模特们有厌食症,而管制员则肥胖。我在控制器中有所有的业务逻辑,在模型中除了关联和验证规则之外什么都没有 通过浏览我的控制器,我现在可以识别模型中可能包含的许多逻辑: 该应用程序具有包含项目的列表,并且可以对项目进行排名

我刚刚读了一篇文章,用银行业的类比来解释MVC。我有几个月使用MVC框架(CakePHP)开发web应用程序的经验,因此我掌握了基本知识,但我开始看到一个主题,这让我觉得我在使用有缺陷的方法来实现我的逻辑:

  • 胖模特,瘦控制器
  • 在模型中保留尽可能多的业务逻辑
在我的应用程序中,模特们有厌食症,而管制员则肥胖。我在控制器中有所有的业务逻辑,在模型中除了关联和验证规则之外什么都没有

通过浏览我的控制器,我现在可以识别模型中可能包含的许多逻辑:

  • 该应用程序具有包含项目的列表,并且可以对项目进行排名。将列表按顺序排列的排序逻辑位于控制器中
  • 类似地,项目(项目模型)也有图像(图像模型)。每个项目可能有一个默认图像(由项目表中的图像标识指定)。当项目与其图像一起显示时,应首先显示默认图像。我在控制器中有这样做的逻辑
  • 显示列表时,相关列表将显示在侧栏中。确定哪些列表相关的逻辑在控制器中
现在回答我的问题:

  • 根据我上面给出的例子,我认为这些是属于模型的控制器中当前的逻辑实例,这是正确的吗
  • 对于web应用程序来说,还有哪些其他逻辑领域应该纳入模型
  • 我确信识别这个问题并改变我的设计模式是成功的一半,但即使我决定采用我上面给出的那些例子,并尝试将这种逻辑转移到一个模型中,我也不知道从哪里开始。有人能在这里发布一些代码或链接到一些好的学习资源,为我指明正确的方向吗?CakePHP特定的帮助会很好,但我相信任何MVC都足够了

  • 我至少使用这两个“测试”来检查我的逻辑是否正确:

    1) 如果我编写一个单元测试,很容易只创建一个“真实”对象来进行测试(=您在生产中使用的对象),而不包括很多其他对象,除了一些值对象。需要一个实际的模型对象和一个实际的控制器对象来进行测试可能是您需要移动功能的一个信号

    2) 问自己这样一个问题:如果我添加了另一种使用这些类的方法,我是否需要以一种近乎复制粘贴的方式复制功能。。。这可能也是移动该功能的一个很好的理由


    同样有趣的是:

    要给你“正确”的答案有点困难,因为其中一些答案涉及到框架的细节(不管你正在使用哪些框架)

    至少在CakePHP方面:

  • 任何涉及数据或数据操作的内容都应该在模型中。就CakePHP而言,一个简单的find()方法怎么样。。。如果有可能它会做一些“特殊的”(即回忆一组特定的“条件”),而这可能是您在其他地方需要的,那么这是一个很好的借口,可以将其包含在模型的方法中

  • 不幸的是,从来没有一个简单的答案,代码重构是一个自然的过程。有时你醒来时会说:“天哪,通心粉……应该在模型里!”


  • 博客作者写获奖答案FTW!以前都听说过:)