我打破了MVC吗?

时间:2011-04-28 03:08:02

标签: model-view-controller architecture

这个问题主要是出于我自己的好奇心,因为我理解架构模式可以帮助我们,而不是控制我们,但我很想知道我构建这个小型宠物项目的方式是否正确实现MVC架构。

我习惯于在浏览器中开发用于Web应用程序,其中浏览器充当一种“主控制器”(您单击一个链接,它将为我更改视图,而无需编写任何额外的代码)。但是我正在为这个宠物项目开发一个桌面应用程序,我很好奇如何实现“浏览器”,如果你愿意的话。我回顾了我曾经做过的一些Flash项目,我注意到他们有代码来处理项目根类中的视图创建。这有意义吗?我的另一个想法是创建一个“ViewPort”类或基本上从根类中获取该功能的东西,并且基本上充当组合视图/控制器(或者我甚至可以使控制器类与它一起使用)并在我需要浏览的所有视图之间更改该类。但我也不确定这是否合理。

有没有一种标准方法可以在MVC中管理您的视图?你是否使用控制器作为根窗口,然后显示你的不同视图(也有自己的控制器?)就像我说的,这更多是为了我自己的好奇心,所以我很感激任何答案。

2 个答案:

答案 0 :(得分:0)

如果我正确理解您的比较,您可以在MVC的根窗口中使用控制器。

因此,在您拥有共享布局页面的情况下,您将拥有一个视图,该视图将自动为使用此_layout.cshtml文件的每个视图加载。

现在,如果你有一个客户订单窗口,你可以拥有所有这些 1. layout.cshtml文件,用于整个站点的共享外观 2.主视图说/ MySite / CustomerOrder / Index / 656 - CustomerController.cs文件创建的内容,一个名为Index的方法。 3.在/Views/CustomerOrder/Index.cshtml视图中,您可以调用off来显示其他视图 RenderAction(“Index”,“CustomerOrderHistory”,new {customerId=@Model.CustomerId} 通过名为CustomerOrderHistoryController.cs的控制器,查找名为Index的方法 要么 的RenderPartial( “CustomerHistory”) 这直接转到视图并复制并通过当前视图的模型发送给它。

所以要回答你的问题,你可以在其中看到其他观点的主视图..但这取决于你是否想这样做 - 你不必这样做。

答案 1 :(得分:0)

Passive View或Supervising控制器更适合winforms应用程序。

http://msdn.microsoft.com/en-us/library/ff647543.aspx