在像Rails这样的MVC框架中,总体共识就是将业务逻辑放入模型中。然而,当谈到像“解决用户解决的所有问题”这样的逻辑时,我不确定哪个模型类应该放置逻辑,因为它需要首先查找用户提交的所有解决方案,并收集问题每个解决方案的id,那么问题id可以得到所有需要的问题。何处放置逻辑处理多个模型
把它放在用户模型中会感觉更优雅,所以我们可以调用类似user.getAllProblemsSolved()
的东西。但是,我们需要从用户实例中获取所有用户标识。在没有用户实例可用的地方,我们必须创建一个用于调用其getAllProblemsSolved
方法的地方。
更重要的是,由于该逻辑主要处理问题和解决方案模型,因此它会将特征嫉妒置入用户模型中。为了避免Feature Envy,放入问题或解决方案感觉同样很好。直觉上,我会把它写成问题,如Problem.getAllProblemsSolvedBy(userId)
,但我没有很好的理由。
那么我应该把这个逻辑放在哪里?
我试图把你的问题分成几段;巨大的文字墙有点面对。 – Marty
您的问题源于误解。是的,模型应该包含业务逻辑。 **但“模型”不是类/对象。**相反,模型是一个应用程序层。你所说的“模型”实际上是滥用[activerecord](http://martinfowler.com/eaaCatalog/activeRecord.html)模式的实例。请停止看Rails作为“正确实现的MVC”的例子,因为它不是。 –