【发布时间】:2014-04-22 05:45:14
【问题描述】:
在像 Rails 这样的 MVC 框架中,总体共识是将业务逻辑放入模型中。但是,当涉及到“获取用户解决的所有问题”之类的逻辑时,我不确定应该将逻辑放在哪个模型类中,因为它需要首先查找用户提交的所有解决方案,并收集问题每个解决方案的 id,然后是问题的 id,以获得所有需要的问题。
把它放在 User 模型中感觉更优雅,所以我们可以调用类似 user.getAllProblemsSolved() 的东西。但是,我们从用户实例中需要的只是用户 ID。在没有现成可用的用户实例的地方,我们必须创建一个来调用它的getAllProblemsSolved 方法。
而且,由于逻辑主要处理问题和解决方案模型,因此将其放在用户模型中会产生 Feature Envy 的味道。为了避免功能嫉妒,放入问题或解决方案感觉同样好。直觉上,我会把它放在问题中,就像Problem.getAllProblemsSolvedBy(userId),但我没有很好的理由。
那么我应该把这个逻辑放在哪里呢?
【问题讨论】:
-
我试图把你的问题分成几段;巨大的文字墙有点令人生畏。
-
您的问题源于误解。是的,模型应该包含业务逻辑。 但是“模型”不是一个类/对象。相反,模型是一个应用层。您所说的“模型”实际上是滥用activerecord 模式的实例。请停止将 Rails 视为“正确实现的 MVC”的示例,因为它不是。
标签: model-view-controller business-logic