【发布时间】:2011-03-19 14:10:01
【问题描述】:
我在理解 MVC 模式时遇到了一些麻烦。我确实知道我们正在尝试将 GUI 与业务逻辑分离,尽管我在理解如何方面遇到了问题。
据我了解,View 是用户看到的。所以它通常是窗口/表单。 Controller 介于 View 和 Model 之间。控制器将使数据双向“流动”。它还会在需要时保持状态(如果我有一个包含 5 个步骤的向导,则 Controller 有责任确保它们以正确的顺序制作,等等)。 Model, 是我的应用程序逻辑的核心所在。
这个观点正确吗?
为了尝试把它变成更有意义的东西,我将尝试用 WinForms 勾勒出一个简单的例子(请不要使用 ASP.NET 或 WPF!-对于 java 人群,据我了解,Swing 有效以类似于 WinForms 的方式!),看看我是否做对了,我会提出我在做这件事时经常遇到的问题。
假设我有一个只包含一个类的模型(只是为了使它更容易。我知道这会使示例看起来很愚蠢,但这样更容易):
class MyNumbers {
private IList<int> listOfNumbers = new List<int> { 1, 3, 5, 7, 9 };
public IList<int> GetNumbers() {
return new ReadOnlyCollection<int>(listOfNumbers);
}
}
现在是时候让我的Controller:
class Controller
{
private MyNumbers myNumbers = new MyNumbers();
public IList<int> GetNumbers() {
return myNumbers.GetNumbers();
}
}
View 应该只有一个 ListBox,其中包含在 MyNumbers 中检索到的所有数字作为项目。
现在,第一个问题出现了:
Controller 是否应该负责创建MyNumbers?在这个简单的情况下,我认为它可以接受(因为MyNumbers 无论如何都会做同样的事情,并且没有关联状态)。但是让我们假设我想为所有不同的控制器使用我的应用程序具有相同的MyNumbers 实例。我必须将我想使用的MyNumbers 实例传递给Controller(以及所有其他需要它的人)。谁来为此负责?在这个 WinForms 示例中,是 View 吗?或者那会是创建View 的类吗?
转个问题:这 3 个部分的实例化顺序是什么? MVC 的“所有者”调用来创建它的代码是什么?
Controller 是否应该同时创建 View 和 Model? View 是否应该实例化 Controller 和 Controller Model?
第二个问题:
假设我只希望我的应用程序具有Use Case 这个Controller 描绘的main 方法应该是什么样子?
第三:
为什么在下面的 MVC 图中,View 有一个指向Model 的箭头? Controller 不应该始终是View 和Model 之间的桥梁吗?
我还有一两个问题,但在我理解了第一个细节之后,问这些问题可能会更有意义。或者也许在我理解了第一个问题之后,所有其他问题都崩溃了。
谢谢!
【问题讨论】:
-
好问题 - 我仍在尝试用“正确的方式”来做 MVC
-
这个问题“主观性和争论性”如何? :boggle:
-
这是一个基于引用图的示例:stackoverflow.com/questions/3072979
标签: c# java .net winforms model-view-controller