MVC的差异和; MVP中代码的MVP

时间:2011-05-01 16:54:44

标签: c# model-view-controller mvp

当我们在谷歌搜索MVC和MVP之间的差异时,有数千篇文章可用,但我读的很少,但他们没有在编码样本方面表现出差异。所以,如果有人知道任何网址,我可以看到MVC和amp;的示例代码MVP实现然后请告诉我网址。我想要基本上小的示例代码,通过它在c#中显示编码流程的差异。我希望我非常清楚我在寻找什么.....我需要代码与mvc编码流相同的代码和另一个与MVP相同的代码。我不是要求理论上的解释。

1 个答案:

答案 0 :(得分:1)

我的博客文章“MVVM vs MVP vs MVC: The differences explained”上也没有示例代码,但我确实有一个针对每个架构的部分,讨论如何使用单词实现它们。我将在这里描述一下。

MVP需要一些实现细节

  1. 每个视图必须实现视图的界面(例如,IUserEditView用于编辑用户)。此接口包含演示者可能需要执行的操作的函数(例如,showUsers(IList用户),displayMessage(String errorMsg)
  2. 为每个视图创建一个演示者。它包含视图需要调用的函数(例如,saveNewUser(用户用户),selectedUserChanged(用户用户))
  3. 在视图的代码隐藏中创建演示者的实例。发生视图事件时,会将相应的消息转发到演示者的实例。例如,单击保存按钮时,所有用户详细信息将以新用户的形式转发给演示者.... myPresenter.saveNewUser(新用户(txtUserName.text,txtPassword.text))
  4. 在(3)中创建演示者的实例时,视图将作为参数传递给构造函数。这样,演示者可以从(1)
  5. 引用IUserEditView

    这是MVP的核心。您可能需要实现中介模式,并让所有演示者都从基本演示者继承。这样,演示者可以相互发送消息而不必明确地相互引用(例如,如果添加了新用户,可能需要在线更新相关视图)。

    MVC有点棘手。

    1. 控制器有一种选择显示哪个视图的方法。这可能只是引用所有视图的实例字典,但更好的方法是让控制器外部的某些类管理细节,然后控制器可以选择ShowView(“UsersView”,listOfUsers)之类的视图。请注意,单独的类可以是基类,也可以是工厂帮助程序
    2. 将视图中的操作转发到适当的控制器的方法。通过网络,您可以确定控制器和放大器。来自请求网址的方法(例如,http://www.mysite.com/mycontroller/method,www.mysite.com / Users / AddNew /)。对于其他系统,您必须实现一个类来管理消息,或者直接将它们转发到视图中的控制器实例。我只在网上使用MVC所以我对最后一点不太确定。
    3. 由于(2),视图现在能够触发控制器中的动作。当它这样做时,控制器会修改模型(此实现将取决于模型的详细信息)。
    4. 模型的更新将发送到视图(通常通过观察者模式)。如果使用.net
    5. ,请查看INotifyPropertyChanged

      提醒:尽管我已经描述了如何实现这两种方法,但它们并不应该被认为是可以互换的。有些情况下,您需要MVC,MVP和MVVM。我想如果您在使用MVVM时没有技术限制,那么它是您的最佳选择。我有偏见但我想也许人们正在从MVC转向MVVM(或MVP),除了像ASP.NET MVC这样的非常具体的案例。如果您需要澄清,我的文章会更详细地描述这一点。

      关于何时使用C#

      的简短摘要
      • WinForms - > MVP
      • WPF - > MVVM
      • ASP - > MVC(如果你不能使用ASP.NET MVC,然后MVP也会工作)