我刚读了blog post,用一个银行类比来解释MVC。我有几个月使用MVC框架(CakePHP)进行Web应用程序开发的经验,所以我得到了基础知识,但我开始看到一个主题让我觉得我采用了一种有缺陷的方法来处理逻辑:
在我的应用程序中,模型是厌食症,控制器是肥胖的。我在控制器中拥有所有业务逻辑,除了模型中的关联和验证规则之外什么都没有。
通过我的控制器进行扫描,我现在可以识别出许多应该放在模型中的逻辑:
现在回答我的问题:
答案 0 :(得分:55)
给你“正确”答案有点困难,因为其中一些处理框架的细节(无论你使用的是什么)。
至少就CakePHP而言:
是
处理数据或数据操作的任何事情都应该在模型中。就CakePHP而言,简单的find()方法呢? ......如果它有可能会做一些“特殊的”(即回忆一组特定的'条件'),你可能需要在其他地方使用,这是一个很好的借口来包装模型的方法。
< / LI>不幸的是,从来没有一个简单的答案,重构代码是一个自然的过程。有时你只是醒来:“神圣的通心粉......这应该在模特中!” (也许你不这样做,但我有:))
答案 1 :(得分:19)
我至少使用这两个'测试'来检查我的逻辑是否在正确的位置:
1)如果我编写单元测试,很容易只创建一个'真实'对象来进行测试(=你在生产中使用的对象)而不包括很多其他对象,除了可能有些价值对象。需要实际模型对象和实际控制器对象来进行测试可能是您需要移动功能的信号。
2)问自己一个问题:如果我添加了另一种使用这些类的方法,我是否需要以几乎复制粘贴的方式复制功能? ......这也可能是移动该功能的一个很好的理由。
也很有趣:http://www.martinfowler.com/bliki/AnemicDomainModel.html