在像Rails这样的MVC框架中,总体共识是将业务逻辑放在模型中。然而,当涉及到像#34;逻辑那样得到用户解决的所有问题时,我不确定我应该把逻辑放在哪个模型类中,因为它需要首先查找用户提交的所有解决方案,并从每个解决方案中收集问题ID,然后问题ID来解决所需的所有问题。
将它放在用户模型中感觉更优雅,因此我们可以调用类似user.getAllProblemsSolved()
的内容。但是,我们从用户实例中需要的只是用户ID。在没有用户实例可用的地方,我们必须创建一个只调用其getAllProblemsSolved
方法。
更重要的是,由于逻辑主要处理问题和解决方案模型,因此它会将 Feature Envy 添加到用户模型中。为了避免 Feature Envy ,放入问题或解决方案感觉同样好。直观地说,我会把它放在问题中,就像Problem.getAllProblemsSolvedBy(userId)
一样,但我没有充分的理由。
那么我应该把这个逻辑放在哪里呢?
答案 0 :(得分:0)
我可以看到Problem
和User
之间的关系是m2m关系,所以如果你想遵循规则并将业务逻辑放在模型类中,你可以放{{1在表示m2m关系的模型类中,但使用该逻辑,getAllProblemsSolvedBy
将返回问题ID,然后您必须从getAllProblemsSolvedBy
模型类中获取问题。
我会将它放在Problem
模型类中,因为该方法将返回Problem
类的实例。
<强>更新强> 2014年4月23日,07:00 UTC
另请注意,在您的情况下,m2m类Problem
取决于这两个模型Solution
和User
是否存在,因此您可以在此模型中查询这两个模型,因此,如果我的代码中有一个m2m模型,我通常会负责查询m2m关系的两端。
例如,在您的情况下,Problem
可以在getAllProblemsSolvedBy
模型类中实现,它可以返回Solution
个实例的列表,并且可以传递{{1}的实例}}