2013-06-04 3 views
3

Я баловаться с рамками дизайна MVP, и я в настоящее время мое решение установить следующим образом:Структура Model-View-Presenter: в каком проекте должны работать интерфейсы?

проекта: МОДЕЛЬ Содержит: Бетонный класс объектов, DataRetrieval класс, интерфейс IDataRetrieval

Проект: ВЕДУЩИЙ Содержит: Presenter класс, интерфейс IView

Проект: VIEW содержит: класс, класс программы

Я пересматриваю это решение, когда я могу, но теперь я Ĉ не помню, почему у меня есть интерфейсы, распределенные так, как они есть. Это не кажется правильным. Я пробовал следующее:

  1. Переместить интерфейсы в соответствующий проект для классов, которые реализовать их.
  2. Переместите оба интерфейса в класс презентатора.

Создание любой из этих изменений будет требовать немного работы, так что я просто подумал, что либо ответ лучше, чем другие (или, возможно, и очень, очень неправильно :))

Если это имеет значение , он разработан на C#.

Я хотел бы услышать ваше мнение!

Энди

+1

Там нет ничего плохого в том, как вы описали свой ток раскладка. Размещение интерфейсов View с классами презентатора позволяет избежать циклической зависимости между сборщиками презентаций и представлений. Это очень распространенный подход к структуре проекта в MVP. –

ответ

2

Im только что сделал с моей собственной MVP-картой на Winforms. Из моего опыта я могу четко определить следующие подпроекты для любой реализации MVP

  1. Модель Проект
  2. Просмотр Интерфейсы
  3. Presenter Интерфейсы проекта (Он может сидеть вместе с видом интерфейсов, а)
  4. Проект внедрения презентатора
  5. Просмотреть проект внедрения (это то, где идет ваш Winforms/WPF/ASP.NET)
  6. Application Controller (Это важный и часто игнорируемый аспект MVP. Он отвечает за запуск всей структуры, включая само приложение. Он также управляет перекрестной связью презентаторов и навигацией)
  7. Application Navigator (Навигаторе блюдом из конкретных взглядов и докладчиков, когда потребовал от контроллера приложения)
1

Я хотел бы предложить вам добавить отдельный проект к вашему решению и назвать его YourSolutionName.Contracts. Переместите туда все интерфейсы View и Model, поэтому ваш проект Presenter не будет иметь зависимости от этих двух сборок (более подробно проверьте принцип инверсии зависимостей).

Смежные вопросы