3

我搜索了很多MVP,但是我没有找到任何可以帮助我很好理解它的好文章。有没有人知道关于这个主题的任何好文章,以及真实世界的例子来帮助我更好地理解它?

提前致谢。

4

4 回答 4

4

查看我对 so 帖子的回答,这可能会对您有所帮助:

ASP.net Model View Presenter 值得花时间吗?

它通过了 MVP 和 MVC 之间的差异,因为这两者经常被对比。
此外,还有一些有用的链接,展示了如何轻松地将 MVP 模型拟合到现有的 ASP.Net 网站。

高温高压

于 2012-07-03T08:33:16.083 回答
3

这是一个致力于在 asp.net 上进行 mvp 的网站:http : //webformsmvp.com/ 作为一种模式的 MVP 有点过时了 - MVC(它具有出色的 asp.net 框架和支持)和 MVVM(事实上的 WPF 模式) ) 已在很大程度上接管。事实上,Martin Fowler(MVP 的发明者)已经在他的网站上记录了该模式确实应该分为两种模式,被动视图和监督控制器:http ://martinfowler.com/eaaDev/ModelViewPresenter.html

于 2012-07-03T08:21:39.507 回答
1

如果您想深入了解此模式,请查看Web Client Software Factory 2010工具。

该工具主要用于创建复合 Web 应用程序(模块),但视图是使用 MVP 模式实现的。如果您要维护传统的 ASP.Net 代码,或者如果您想深入了解 ASP.Net 范例,那么检查该工具的源代码是一个很好的起点。

这个工具需要你在 Visual Studio 中安装几个扩展,然后,你可以创建一个特殊的 Web 项目来为你实现 MVP,它将上下文菜单添加到 Visual Studio 以方便任务

例子:

  • 创建一个新项目

创建项目

  • 使用演示者添加视图

使用演示者添加视图

  • 检查生成的文件

检查生成的文件

  • 检查默认生成的代码:

         public partial class MyNewView : Microsoft.Practices.CompositeWeb.Web.UI.Page, IMyNewViewView
         {
            private MyNewViewPresenter _presenter;
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!this.IsPostBack)
                {
                    this._presenter.OnViewInitialized();
                }
                this._presenter.OnViewLoaded();
            }
    
            [CreateNew]
            public MyNewViewPresenter Presenter
            {
                get
                {
                    return this._presenter;
                }
                set
                {
                    if (value == null)
                        throw new ArgumentNullException("value");
    
                    this._presenter = value;
                    this._presenter.View = this;
                }
            }
    
            // TODO: Forward events to the presenter and show state to the user.
            // For examples of this, see the View-Presenter (with Application Controller) QuickStart:
            //  
    
        }
    
        public interface IMyNewViewView
        {
        }
    
        public class MyNewViewPresenter : Presenter<IMyNewViewView>
        {
    
            // NOTE: Uncomment the following code if you want ObjectBuilder to inject the module controller
            //       The code will not work in the Shell module, as a module controller is not created by default
            //
            // private IShellController _controller;
            // public MyNewViewPresenter([CreateNew] IShellController controller)
            // {
            //      _controller = controller;
            // }
    
            public override void OnViewLoaded()
            {
                // TODO: Implement code that will be executed every time the view loads
            }
    
            public override void OnViewInitialized()
            {
                // TODO: Implement code that will be executed the first time the view loads
            }
    
            // TODO: Handle other view events and set state in the view
        }
    

抢夺工具:

顺便说一句,如果您要开始一个新项目,使用 MVC 应该是一个更好的主意,如果您需要编辑现有应用程序,您可以以 Web 客户端软件工厂中 MVP 的实现为基础。

如果您有兴趣,我认为有一个解决方法可以将现有应用程序转换为使用 Web 客户端软件工厂

于 2012-07-03T09:11:39.847 回答