视图和控制器之间接口的习惯用法



我有一个设计问题:

我使用的是MVC设计模式。但视图在我的项目中是I/O部分。这意味着在硬盘上写入/读取数据,或在屏幕上打印内容的部分。

正如我所提到的,"视图"还应该执行读/写操作。我们的程序需要一些输入数据来执行所需的数值计算。由于这个输入数据也应该是手动可编辑的,我们决定将这个输入数据作为xml。

然后控制器要求"视图"读取这个xml输入数据,以便可以填充模型。

这种情况看起来是这样的:

Controller
/     
/           
/                 
View               Model
/    
/          
/                
xml reader         xml data

所以现在的问题是,当控制器读取输入数据时,从视图传递什么?

视图应该从模型中创建类的实例,并用输入数据填充它们,然后将这些实例传递给控制器。

还是应该将枚举和浮点值传递给控制器,这样控制器就可以实例化所需的类并将浮点值提供给构造函数?

哪种设计更好,为什么?

编辑:我们认为视图应该包含输入数据的加载(现在实现为文件的I/O)的原因是,在未来版本的代码中,我们希望有一个gui,用户可以在其中点击来构建输入数据。然后视图获得完全相同的数据(但来自gui,而不是来自文件),并将其传递给控制器。因此,现在,它只是最简单的"视图"(用户与xml交互时)<这是对MVC的正确理解吗>

编辑2:我们实现了一种数值方法,如FEM。因此,模型包含两件事:一方面,它包含数据(部分可以用xml表示),即有限元的表示等等。另一方面,模型包含逻辑,即偏微分方程,其参数也应该存储在xml中。因此,模型中的逻辑需要输入数据,而不是视图。

如果需要提供更多信息,请随时询问。

非常感谢!

根据四人帮的说法,如果我没有错的话,Model类是应该执行IO操作的人。视图是一种演示,允许用户或控制器对模型进行修改,但不应负责IO操作,因为这会暴露模型的内部表示,从而违反封装。

如果你需要这样做,我仍然建议绕过整个Model对象,因为这会使控制器不知道内部表示;如果传递内部数据,所有视图、控制器和模型都需要了解model的内部,这使得模式的三个部分更加耦合;而使用它的目的是尽可能地将三个部分解耦,从而提高可维护性。

如果我理解正确,您有两个数据模型,在这种情况下,您应该始终遵循MVC模式。组件的分离是有原因的,如果您稍后想将xml转换为gui,这将特别有帮助:

模型处理数据,视图允许你通过它自己的"镜头"来观察它,控制器允许你操纵模型。

如果您的视图需要某种类型的输入数据,您可以在此基础上实现第二个MVC。您将得到第二个模型(model2:您的xml数据)和第二个控制器。现在,您的控制器是第二个模型的"手动编辑"。稍后,您的控制器将成为GUI的一部分,GUI还将具有第二个模型的第二个视图)。

注意:请参阅评论中的讨论。

最新更新