【问题标题】:Who is responsible for initialization of the single model components in MVC谁负责MVC中单个模型组件的初始化
【发布时间】:2016-01-13 14:52:13
【问题描述】:

我找不到我的问题的明确答案。

在 MVC 中,所有内容都在模型、视图和控制器方面进行了很好的划分。所以通常我会创建一个控制器对象来保存模型和视图的实例。模型和视图彼此不知道任何东西,因此它们必须通过控制器进行通信。

例如,当我为游戏模型编写代码时,有像“GameBoard”这样的类,它通常为“Tile”类型的对象保存一个对象容器......“Player”或“Brick”可以是“Tile”的继承类。

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

告诉“GameBoard”-构造函数它应该持有哪些对象通常是一个好习惯吗?

我之所以问,是因为我读到了一些关于“单一责任原则”的东西......所以模型应该只是模型(而不是其他)并且不关心自身的初始化吗?

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

谢谢

【问题讨论】:

    标签: model-view-controller single-responsibility-principle


    【解决方案1】:

    在 MVC 中,所有内容都在模型、视图和控制器方面进行了很好的划分。所以 通常我会创建一个控制器对象来保存 模型和视图。模型和视图互不了解 这样他们就必须通过控制器进行通信。

    我不确定你的意思。我不会说控制器的模型和视图交互,它们实际上从未在这里相遇。模型和视图在视图内部进行通信。

    例如,当我为游戏模型编写代码时,有 像“GameBoard”这样的类,它通常包含一个对象容器 对于“Tile”类型的对象...“Player”或“Brick”可以是继承的 “瓷砖”类。

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

    告诉“GameBoard”-Constructor 通常是一个好习惯吗 它应该持有哪些对象?

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

    private set;
    

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

    我之所以问,是因为我读到了一些关于“单一责任 原则”......所以模型应该只是模型(什么都不是 else) 并且不关心自身的初始化?

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

    或者这个“初始化”是控制器的任务?是时, 我应该将一个控制器分成多个控制器吗? 关心它的“单一责任”?或者一个控制器就足够了 模型和视图之间?

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

    控制器应该只负责一项职责,但这并不一定意味着它只做一两件事。由程序员决定其控制器的范围应该是什么。

    希望对你有帮助。

    【讨论】:

    • 谢谢,这很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多