2016-01-13 73 views
0

我找不到我的问题的明确答案。谁负责初始化MVC中的单个模型组件

在MVC中,所有模型,视图和控制器都相当分离。所以通常我会创建一个控制器对象来存放模型和视图的实例。模型和视图彼此之间不知道任何事情,因此他们必须通过控制器进行通信。例如,当我编写游戏模型的代码时,有类似“GameBoard”的类,它通常为类型为“Tile”的对象保存对象容器...“Player”或“Brick”可以是一个继承的“Tile”类。

例如一开始必须有一些砖块用于第一级,所以我必须在某个地方初始化它,我通常在GameBoard的构造函数中这样做。

通常告诉“GameBoard” - 构造器应该保持哪个对象是一种很好的做法吗?

我在问,因为我读了一些关于“单一责任原则”......所以模型应该只是模型(而不是别的),不关心自己的初始化?

或者这是“初始化”控制器的任务吗?如果是,我应该将一个控制器分成多个控制器来处理其“单一责任”?或者是模型和视图之间足够的控制器?

感谢

回答

0

在MVC中,所有的模型,视图和控制器是相当分歧。所以 通常我会创建一个控制器对象,其中包含 模型和视图的实例。模型和视图彼此不知道任何东西 ,以便它们必须通过控制器进行通信。

我不确定这是什么意思。我不会说控制器的模型和视图交互,他们实际上从来没有在这里见过。模型和视图在视图内部进行通信。

例如当我写我的代码的一个游戏的模型中,有 类像“游戏键盘”通常保持对象容器 为类型“瓷砖”的对象...“播放器”或“砖块“可以是继承的”瓷砖“类别 。

例如一开始必须有一些砖块用于第一级,所以 我必须在某个地方初始化它,我通常在GameBoard的 构造函数中这样做。

通常是一个很好的做法,告诉“GameBoard” - 构造者 它应该保持哪个对象?

是的,就是这样。 只有允许非模型对象接收构造函数内的值。如果您想认真对待这种做法,您应该添加:

private set; 

在类属性上使它们不可变。这将限制您仅将该对象修改为构造函数和构造函数的能力。

我问,因为我看了一些关于“单一职责原则 ” ...所以应该模型只是模型(并没有什么别的 ),并不在乎其本身初始化?

该模型应该有关于如何存储数据的严格规则。为了便于阅读,您可以添加不同的构造函数以允许您在一行上填充模型,但这不是必需的。

或者这是“初始化”控制器的任务吗?如果是, 我应该将一个控制器划分为多个控制器,其中关注其“单一责任”需要 ?或者是模型和视图之间足够的一个控制器 ?

是的,控制器的唯一工作就是与视图进行通信。该视图需要数据,因此控制器将填充该模型,并将其与视图进行通信。这应该是它正在做的一切。

控制器应该只有一个责任,但这并不一定意味着它只做一两件事情。程序员可以自行决定其控制器的范围。

我希望这对你有帮助。

+0

谢谢,这非常有帮助! –