首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >胖模型、瘦控制器和MVC设计模式

胖模型、瘦控制器和MVC设计模式
EN

Stack Overflow用户
提问于 2009-01-21 21:34:54
回答 2查看 12.4K关注 0票数 75

我刚刚读了一个blog post,它用一个银行类比来解释MVC。我有几个月的使用MVC框架(CakePHP)进行web应用程序开发的经验,所以我掌握了基础知识,但我开始看到一个主题,它让我认为我在逻辑上采取了一种有缺陷的方法:

  • Fat models,skinny controllers
  • Keep在模型中尽可能多地使用业务逻辑

在我的应用中,模型是厌食症的,控制器是肥胖的。我将所有的业务逻辑都放在了控制器中,除了模型中的关联和验证规则之外,什么也没有。

浏览一下我的控制器,我现在可以识别出许多可能应该放在模型中的逻辑:

  • 应用程序有列表,其中包含项目,并且可以对项目进行排名。将列表按排名顺序排列的排序逻辑是在controller.
  • Similarly,项目(项目模型)中,也有图像(图像模型)。每个项目可能有一个默认图像(由项目表中的image_id指定)。当项目与其图像一起显示时,应首先显示默认图像。我的逻辑是在controller.
  • When中执行此操作,列表显示在侧边栏中,相关列表显示在侧栏中。确定哪些列表相关的逻辑在控制器中。

现在来回答我的问题:

  1. 通过我上面给出的例子,我认为这些是属于模型的控制器中的逻辑实例的想法是正确的吗?
  2. 什么是web应用程序中常见的其他逻辑领域,应该进入模型中?
  3. 我确信识别这个问题并改变我的设计模式是成功的一半,但即使我决定采用上面给出的例子并尝试将该逻辑转移到模型中,我也不知道从哪里开始。有人可以通过在这里发布一些代码或链接到一些好的学习资源来为我指明正确的方向吗?CakePHP特定的帮助将是很棒的,但我相信任何MVC都会足够。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-01-21 23:03:18

要给出“正确”的答案有点困难,因为其中一些涉及框架的细节(无论您正在使用的是哪种框架)。

至少在CakePHP方面:

处理数据或数据操作的

  1. Yes
  2. Anything应该在模型中。就查找而言,一个简单的CakePHP ()方法怎么样?如果它有机会做一些“特殊”的事情(例如,回想一下你在其他地方可能需要的一组特定的“条件”),这是一个很好的借口来包装在模型的method.
  3. Unfortunately中从来没有一个简单的答案,代码的重构是一个自然的过程。有时你只会一觉醒来:“我的天啊,通心粉……这应该在模型中!”(也许您不会这样做,但我这样做了:)
票数 55
EN

Stack Overflow用户

发布于 2009-01-21 22:33:17

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

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

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

同样有趣的是:http://www.martinfowler.com/bliki/AnemicDomainModel.html

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/467113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档