2015-06-19 4 views
4

Я изучаю шаблон MVP для моего текущего проекта (приложение Windows). У меня хороший опыт работы в MVVM, используя его в Silverlight и WPF. В MVVM мой взгляд и ViewModel используются для отдельного проекта и использования сильной привязки WPF, которые они используют для связи друг с другом. Но в MVP большинство примеров я вижу в Интернете, где View и ведущий находятся в одном проекте.Могу ли я создать View и Presenter в другом проекте в шаблоне MVP

Итак, мои вопросы: - Есть ли способ, которым я могу создать View и Presenter в другом проекте? Я имею в виду View as Windows Application и Presenter как проект библиотеки классов.

Если да, то как оба вида View и Presenter ссылаются друг на друга.

ответ

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... 
    } 
} 
+0

#Benjamin Gale Спасибо за объяснения, но так как я очень новой для этой модели. Можете ли вы предоставить мне какой-либо пример, например, как загружать данные в сетку при нажатии кнопки загрузки с использованием шаблона MVP. –

+0

# Benjamin Gale Спасибо, это помогло мне. –