部分业务逻辑是否保留在控制器中是否正确?

时间:2010-02-06 13:34:56

标签: model-view-controller oop

有这样一个简化的类来规范问答游戏:

class Game():
def __init__(self,username):
    ...
    self.username=username
    self.question_list=db.getQuestions()
    self.game_over=False

def get_question(self):
    ...
    if self.question_list.is_not_empty():
        return question

def check_answer(answer)
    ...
    if answer.is_correct():
        self.game_over=False
    else:
        self.game_over=True

并且有一个Web控制器接收输入参数,如用户名,问题和答案..直接从控制器使用Game类是否正确?

我问这个问题是因为查看控制器代码,我也感到内疚,因为我已经编写了一些逻辑;例如,控制器在收到用户名时实例化游戏,然后按顺序调用get_question和check_answer。

你认为让另一个“层”从控制器接收输入参数并直接与Game类对话更合适吗?

2 个答案:

答案 0 :(得分:3)

我觉得你很好。

问题是你无法拥有一个完美的架构,只能在边界的一侧看到完全隔离的层和数据格式。一些层不可避免地要与另一层交谈。

如果您正在执行一个非常基本的逻辑来决定控制器如何继续下一步,则可以调用get_question和check_answer。如果只是几个检查会导致一些可能的控制器决策,那就去做吧。

但是,如果您想要从用户收集数据,将其转换为某种特定格式,验证它,然后可能调用可能产生数十种可能结果的业务方法,以及所有直接在控制器中的数据,它会太清楚了。

答案 1 :(得分:0)

我肯定会尽可能多地保留控制器。否则你的控制器臃肿将是荒谬的。