我可以在MVP模式中的不同项目中创建View和Presenter

时间:2015-06-19 05:53:52

标签: c# mvp webformsmvp

我正在学习当前项目(Windows应用程序)的MVP模式。 我在MVVM中使用它在Silverlight和WPF中有很好的工作经验。 在MVVM中,我的视图和ViewModel用于处于单独的项目中,并使用它们用于彼此通信的WPF的强绑定。 但是在MVP中,我在Internet上看到的大多数示例都是View和演示者在同一个项目中。

所以我的问题是: - 有什么方法可以在不同的项目中创建View和Presenter吗?我的意思是View as Windows Application和Presenter as Class Library project。

如果是,则我的View和Presenter如何互相引用。

1 个答案:

答案 0 :(得分:2)

您的演示者只能通过界面与视图进行通信。

您的演示者和视图界面可以包含在Windows应用程序可以引用的类库项目中。您在Windows应用程序项目中创建的任何具体视图都可以实现适当的视图界面。

下面的简单示例显示了类可能如何交互。

<强> ClassLibrary.dll

public class Presenter {

    // Repository class used to retrieve data
    private IRepository<Item> repository = ...;

    public void View { get; set; }

    public void LoadData() {
        // Retrieve your data from a repository or service
        IEnumerable<Item> items = repository.find(...);
        this.View.DisplayItems(items);
    }
}

public interface IView {
    void DisplayItems(IEnumerable<Item> items);
}

<强> WindowsApplication.dll

public class ConcreteView : IView {

    private Button btn
    private Grid grid;
    private Presenter presenter = new Presenter();        

    public ConcreteView() {
        presenter.View = this;
        btn.Click += (s, a) => presenter.LoadData();
    }

    public void DisplayItems(IEnumerable<Item> items) {
        // enumerate the items and add them to your grid...
    }
}