【发布时间】:2014-01-16 23:35:29
【问题描述】:
我有一个设计问题:
我正在使用 MVC 设计模式。但是视图在我的项目中是 I/O 部分。这意味着向硬盘驱动器写入/读取数据或在屏幕上打印某些内容的部分。
我提到过,“视图”还应该执行读/写操作。我们的程序需要一些输入数据来执行所需的数值计算。 由于这个输入数据也应该可以手动编辑,我们决定把这个输入数据设为 xml。
然后控制器要求“视图”读取这个xml输入数据,以便填充模型。
这种情况看起来像这样:
Controller
/ \
/ \
/ \
View Model
/ \
/ \
/ \
xml reader xml data
那么现在的问题是,当 View 读取输入数据时,要向 Controller 传递什么?
视图是否应该从模型创建类的实例并用输入数据填充它们并将这些实例传递给控制器。
还是应该将枚举和浮点数传递给控制器,以便他可以实例化所需的类并将浮点数提供给构造函数?
哪种设计更好,为什么?
编辑:我们认为视图应该包含输入数据的加载(现在实现为文件的 I/O)的原因是,在代码的未来版本中,我们想要有一个 gui,用户可以在其中点“n”单击来构建输入数据。然后视图获得完全相同的数据(但随后来自 gui,而不是来自文件)并应将其传递给控制器。所以现在,它只是可能的最简单的“视图”(当用户与 xml 交互时)。 这是对 MVC 的正确理解吗?
编辑 2: 我们实现了一种数值方法,例如 FEM。所以模型包含两件事:一方面它包含数据(部分可以用 xml 表示),即有限元的表示等。另一方面,它包含逻辑,即偏微分方程,其参数也应存储在 xml.xml 中。 因此模型中的逻辑需要输入数据,而不是视图。
如果需要提供更多信息,请随时询问。
非常感谢!
【问题讨论】:
-
我不确定您是否正确理解了模型视图。模型应该保存(并且很可能还读取)任何必要的数据,并且视图应该只用于向用户表示这些数据。
-
@arne:我也不确定我是否理解正确 :) 所以问题可以扩展到那部分:“MVC 中的 I/O 属于哪里?”
标签: c++ model-view-controller enums