有这样一个简化的类来规范问答游戏:
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类对话更合适吗?
答案 0 :(得分:3)
我觉得你很好。
问题是你无法拥有一个完美的架构,只能在边界的一侧看到完全隔离的层和数据格式。一些层不可避免地要与另一层交谈。
如果您正在执行一个非常基本的逻辑来决定控制器如何继续下一步,则可以调用get_question和check_answer。如果只是几个检查会导致一些可能的控制器决策,那就去做吧。
但是,如果您想要从用户收集数据,将其转换为某种特定格式,验证它,然后可能调用可能产生数十种可能结果的业务方法,以及所有直接在控制器中的数据,它会太清楚了。
答案 1 :(得分:0)
我肯定会尽可能多地保留控制器。否则你的控制器臃肿将是荒谬的。