2015-08-25 4 views
0

У меня возникают проблемы при реализации шаблона MVP. Чтобы объяснить это легко:MVP Pattern: Как модель запрашивает представление?

У меня есть WinForm (в View), который реализует интерфейс (его соответствующий IView). У меня также есть ведущий и, наконец, модель.

Но в начале не было ни IView, ни Presenter, ни Model. Был один огромный вид, который сделал все. И поэтому начался рефакторинг ...

Все прошло отлично, почти идеально. Но теперь, я встретил эту ситуацию, и вопрос о дизайне пришел ко мне:

Я нашел, что у представления есть метод, который принимает событие. Этот метод очень велик и имеет много логики. Поэтому я просто поместил весь метод в презентаторе, чтобы освободить представление о логике. Все было хорошо.

Но тогда я хотел освободить докладчика от этой логики и зарядить модель ... потому что эта логика была бизнес-правилами!

Я начал это делать, а затем я понял кое-что: в некоторых местах эта логика просила меня создать экземпляр других WinForms.

На данный момент возникает вопрос: Если ведущий ничего не знает о бизнес-правилах, он не должен знать, когда создавать экземпляр WinForm или нет. Так кто знает? Модель, конечно. Но ...

  1. Как может модель рассказать кому-нибудь, с каким видом (и когда) до экземпляр?
  2. Кто должен быть этим «кем-то»?
  3. Я в порядке, когда я говорю Ведущий не должен знать, когда и какой вид создать? Скажите только реализацию IView, только если кто-то попросит об этом (возможно, модель).

Спасибо всем!

+0

Я не уверен, что это помогает, но я думаю, что вы имеете в виду MVC, где у вас есть MVP. Если это так, то это контроллер, который информирует модель, и является «клеем» между моделью и представлением. Удачи вам в вашем проекте :-) Вот ссылка для получения дополнительной информации: http://www.tomdalling.com/blog/software-design/model-view-controller-explained/ –

+0

Спасибо Джейкоб, но я на самом деле имею в виду MVP , Как я понимаю, модель в MVP включает контроллер и модель MVC. MVP только отделяет представление от модели через презентатор. (то, почему ведущий не должен знать бизнес-правила). Но все равно спасибо! ;) – Nachokhan

ответ

1

1) Я вижу 2 способа сделать это:

  • DECLARE события на модели, имеют вид (или ведущий) подписаться на события и, когда логика на модели решает, что необходимо, чтобы начать вид модель просто запускает событие, и вид вызывает новый вид.
  • Используйте делегаты. Когда вы вызываете модель из вашего представления, просто передавайте делегаты, у которых есть код для инициализации представлений, которые могут потребоваться, и когда логика модели принимает решение, необходимо запустить представление, которое модель просто вызывает делегатов.

2) ведущий

3) Если на дисплее, если из точки зрения зависит от бизнес-логики, то да ведущий не должен делать решение

+0

Объявление событий и подозрительность для них - это хорошая идея. Большое спасибо, Жоао! – Nachokhan

1

Как модель может сказать кому-то, какой вид (и когда), чтобы создать экземпляр ?

Это не работа модели. Не допускайте ответственности. Это логика приложения.

Кто должен быть этим «кем-то»?

Посмотрите на Application Controller and Event Aggregator pattern.

Я в порядке, когда говорю, что ведущий не должен знать, когда и какой вид создать? Скажите только реализацию IView, только если кто-то попросит об этом (возможно, модель).

Ведущий должен знать только представление через его интерфейс. Бывают моменты, когда вам может понадобиться спецификация WinForms, но это все равно должно быть абстрагировано каким-то образом. Докладчики должны быть полностью подвергнуты тестированию, если они начнут знать конкретные детали, это становится недостижимым.

+0

Дэвид, если это не модель, то кому принадлежит эта ответственность? Поскольку я понимаю шаблон MVP, модель включает бизнес-правила (логику) и модель данных. Мы не говорим о MVC, но MVP. Это то, что имеет смысл для меня. В противном случае шаблон MVP не будет иметь слой, в котором будет найдена «логика приложения». – Nachokhan

+0

Вы читали сообщение в блоге, на которое я ссылался? –

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