模型-视图-控制器- MVC的区别&MVP方面的代码在c#

本文关键字:方面 代码 MVP 区别 视图 控制器 MVC 模型 | 更新日期: 2023-09-27 17:54:37

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

模型-视图-控制器- MVC的区别&MVP方面的代码在c#

我的博客文章"MVVM vs MVP vs MVC:差异解释"中也没有示例代码,但我确实有一个章节讨论了如何使用文字实现它们。我将在这里描述它。

MVP需要一些实现细节

  1. 每个视图必须为视图实现一个接口(例如IUserEditView用于编辑用户)。该接口包含演示者可能需要做的事情的函数(例如,showUsers(列出用户),displayMessage(字符串errorMsg)
  2. 为每个视图创建一个演示者。它包含视图需要调用的函数(例如,saveNewUser(User User), selectedUserChanged(User User))
  3. 演示者的实例是在视图的代码隐藏中创建的。当视图事件发生时,适当的消息被转发到呈现者的实例。例如,当单击保存按钮时,所有用户详细信息都以新用户....myPresenter的形式转发给演示者。saveNewUser(新用户(txtUserName。文本,txtPassword.text)
  4. 当演示者的实例在(3)中创建时,视图作为参数传递给构造函数。这样,演示者就可以从(1)
  5. 中引用IUserEditView

这就是MVP的精髓所在。您可能需要实现中介者模式,并让所有呈现者继承基呈现者。这样,演示者可以相互发送消息,而不必显式地引用彼此,这是重要的(例如,如果添加了一个新用户,可能需要更新一个相关的视图,如用户在线)。

MVC有点棘手。

  1. 控制器有一个选择显示哪个视图的方法。这可能只是引用所有视图实例的字典,但更好的方法是在控制器之外有一些类管理细节,然后控制器可以选择视图与ShowView("UsersView", listOfUsers)。注意,单独的类可以是基类,也可以是工厂,helper
  2. 将操作从视图转发到适当的控制器的方法。有了web,你就可以确定控制器& &;方法从请求url(例如,http://www.mysite.com/mycontroller/method, www.mysite.com/Users/AddNew/)。对于其他系统,您必须实现一个类来管理消息,或者直接将它们转发给视图中控制器的实例。我只使用MVC与web,所以我不太确定最后一点。
  3. 由于(2),视图现在能够触发控制器中的动作。当它这样做时,控制器修改模型(其实现将取决于模型的细节)。
  4. 对模型的更新被发送到视图(通常通过观察者模式)。检查INotifyPropertyChanged如果使用。net

注意事项:尽管我已经描述了如何实现这两种方法,但它们不应该被认为是可互换的。在某些情况下,您需要MVC、MVP和MVVM。我认为如果您在使用MVVM时没有技术限制,那么它是您的最佳选择。我有偏见,但我认为也许人们正在从MVC转向MVVM(或MVP),除了非常特殊的情况,如ASP。净MVC。如果你需要澄清,我的文章有更详细的描述。

c#

中何时使用每一个的简短总结
  • WinForms -> MVP
  • wpf -> MVVM
  • ASP -> MVC(如果你不能使用ASP。网MVC,然后MVP也会工作)