谁负责初始化 MVC 中的单个模型组件
Who is responsible for initialization of the single model components in MVC
我找不到我的问题的明确答案。
在 MVC 中,模型、视图和控制器是完全分开的。所以通常我会创建一个控制器对象来保存模型和视图的实例。模型和视图彼此之间不了解任何信息,因此它们必须通过控制器进行通信。
例如,当我为游戏模型编写代码时,有像 "GameBoard" 这样的 classes,它通常包含 "Tile" 类型对象的对象容器。 . "Player" 或 "Brick" 可以是 "Tile" 的继承 class。
例如,在开始时第一层必须有一些积木,所以我必须在某个地方初始化它,我通常在 GameBoard 的构造函数中这样做。
告诉 "GameBoard"-构造函数它应该保存哪些对象通常是一个好习惯吗?
我问是因为我阅读了一些关于 "single responsibility principle" 的内容...所以模型应该只是模型(而不是其他)并且不关心自身的初始化吗?
或者这是 "initialization" 控制器的任务?如果是,我应该将一个控制器分成多个控制器来处理它的 "single responsibility" 吗?或者在模型和视图之间有一个控制器就够了吗?
谢谢
In MVC, all is pretty divided in model, view and controller. So
usually i'll create a controller object which holds instances of the
model and the view. Model and view don't know anything from each other
so that they have to communicate over the controller.
我不确定你的意思。我不会说控制器的模型和视图交互,它们实际上从不在这里相遇。模型和视图在视图内部进行通信。
For example when i write my code for model of a game, there are
classes like the "GameBoard" which usually holds an object container
for objects of type "Tile"... "Player" or "Brick" can be an inherited
class of "Tile".
For example on start there have to be some bricks for first level, so
i have to initialize it in some place, i usually did that in the
constructor of the GameBoard.
Is it generally a good practice to tell the "GameBoard"-Constructor
which objects it should hold?
是的,就是这样。最好 仅 允许 non-model 对象在构造函数中接收值。如果你想认真对待这种做法,你应该添加:
private set;
在 类 属性上,使它们不可变。这会将您修改此对象的能力限制为仅构造函数和构造函数。
I am asking because I read something about the "single responsibility
principle" ... so should the model only be the model (and nothing
else) and don't care about initialization of itself?
该模型对于数据在其中的存储方式应该没有那么严格的规则。为了可读性,您可以添加不同的构造函数以允许您在一行中填充模型,但这不是必需的。
Or is this "initialization" a task for the controller? When yes,
should i divide one controller into multiple controllers which take
care of its "single responsibility" ? Or is one controller enough
between model and view?
是的,控制器的唯一工作应该是与视图通信。视图需要数据,因此控制器将填充模型,并将其与视图进行通信。这应该是它正在做的一切。
控制器应该只负责一项职责,但这并不一定意味着它只做一两件事。由程序员自行决定控制器的范围。
希望对您有所帮助。
我找不到我的问题的明确答案。
在 MVC 中,模型、视图和控制器是完全分开的。所以通常我会创建一个控制器对象来保存模型和视图的实例。模型和视图彼此之间不了解任何信息,因此它们必须通过控制器进行通信。
例如,当我为游戏模型编写代码时,有像 "GameBoard" 这样的 classes,它通常包含 "Tile" 类型对象的对象容器。 . "Player" 或 "Brick" 可以是 "Tile" 的继承 class。
例如,在开始时第一层必须有一些积木,所以我必须在某个地方初始化它,我通常在 GameBoard 的构造函数中这样做。
告诉 "GameBoard"-构造函数它应该保存哪些对象通常是一个好习惯吗?
我问是因为我阅读了一些关于 "single responsibility principle" 的内容...所以模型应该只是模型(而不是其他)并且不关心自身的初始化吗?
或者这是 "initialization" 控制器的任务?如果是,我应该将一个控制器分成多个控制器来处理它的 "single responsibility" 吗?或者在模型和视图之间有一个控制器就够了吗?
谢谢
In MVC, all is pretty divided in model, view and controller. So usually i'll create a controller object which holds instances of the model and the view. Model and view don't know anything from each other so that they have to communicate over the controller.
我不确定你的意思。我不会说控制器的模型和视图交互,它们实际上从不在这里相遇。模型和视图在视图内部进行通信。
For example when i write my code for model of a game, there are classes like the "GameBoard" which usually holds an object container for objects of type "Tile"... "Player" or "Brick" can be an inherited class of "Tile".
For example on start there have to be some bricks for first level, so i have to initialize it in some place, i usually did that in the constructor of the GameBoard.
Is it generally a good practice to tell the "GameBoard"-Constructor which objects it should hold?
是的,就是这样。最好 仅 允许 non-model 对象在构造函数中接收值。如果你想认真对待这种做法,你应该添加:
private set;
在 类 属性上,使它们不可变。这会将您修改此对象的能力限制为仅构造函数和构造函数。
I am asking because I read something about the "single responsibility principle" ... so should the model only be the model (and nothing else) and don't care about initialization of itself?
该模型对于数据在其中的存储方式应该没有那么严格的规则。为了可读性,您可以添加不同的构造函数以允许您在一行中填充模型,但这不是必需的。
Or is this "initialization" a task for the controller? When yes, should i divide one controller into multiple controllers which take care of its "single responsibility" ? Or is one controller enough between model and view?
是的,控制器的唯一工作应该是与视图通信。视图需要数据,因此控制器将填充模型,并将其与视图进行通信。这应该是它正在做的一切。
控制器应该只负责一项职责,但这并不一定意味着它只做一两件事。由程序员自行决定控制器的范围。
希望对您有所帮助。