2010-11-07 5 views
3

Я рассматриваю каждую триаду MVP как изолированный компонент. Например, если View реализует интерфейс IView, то Presenter знает, конечно, View through the IView.Пассивный вид: связь между компонентами

Это то, что я могу сделать компонентом как можно многоразовым. Теперь мне нужно объединить эти компоненты MVP для формирования приложения. Мне интересно, какая хорошая практика заключается в том, чтобы сохранить эти компоненты как можно более разделенными. Но, конечно, мне нужно было бы, чтобы они общались/реагировали друг на друга.

Могу ли я просто сделать IView выставленным для презентаций другого? Или я должен просто позволить ведущим общаться друг с другом, не зная об основных Представлениях?

Благодаря

ответ

3

В MVP я вижу, как ведущие к оркестраторов деятельности. Таким образом, они являются естественным выбором, на котором основывается состав приложения.

Предоставление представления ведущего другим ведущим нарушает идею инкапсуляции внутри шаблона MVP. Хотя это не уменьшает возможность повторного использования компонента, отображающего его представление, это уменьшает возможность повторного использования компонента, использующего представление другого компонента, поскольку увеличивает его зависимости от компонентов.

Таким образом, я бы оставил взгляды частным для докладчиков и дал возможность ведущим общаться друг с другом.


Разработка в ответ на комментарий

Когда я говорю сохранить вид приватный ведущий, я имею в виду частный: не подвергается воздействию внешнего мира, кроме как через посредство ведущего. Конечно, ведущий может разоблачить методы внешнего мира, которые заставят его манипулировать своим взглядом. Если ведущий делает это через интерфейс, он может фактически использовать свое собственное представление в качестве делегата для реализации интерфейса, но, вопреки тому, что вы предлагаете, ведущий делегирует материал в представление, а не наоборот.

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

Вид должен обрабатываться только его презентатором. Теперь, конечно, вы можете повторно использовать представления в нескольких презентаторах, но экземпляр представления должен обрабатываться только ведущим, который его создавал. Если вы открываете его напрямую (даже через целые или частичные интерфейсы), вам придётся иметь дело с представлением, которым могут манипулировать ведущие презентации, и ни один ведущий больше не контролирует представление.

Единственный код, который я имею в представлении, - это уведомления его ведущему о том, что сделал пользователь (также известный как жесты пользователя в некоторых обсуждениях MVP). Режиссер должен решить, что с этим делать. Я также сохраняю всю логику о том, какие элементы управления включать/отключать в ответ на выбор пользователя в презентаторе, а не в представлении. Это не только поддерживает всю логику взаимодействия в презентаторе, но также помогает создавать единичные тестируемые пользовательские интерфейсы (формы).

+0

Можете ли вы подробнее рассказать об этом? Я предполагаю, что вы имеете в виду разоблачение ведущего через интерфейс. Этот интерфейс должен содержать только методы/события, релевантные для внешнего взаимодействия с представлением. С этим я могу просто разделить интерфейс IView, реализованный View на 2 части: один для частного лица для частного лица, а другой предназначен для презентатора снаружи. Теперь Presenter может реализовать тот же открытый интерфейс и быть делегатом для своего представления. Или он может просто вернуть представление через этот разделенный интерфейс. – user129148

+0

Это имеет большой смысл! благодаря – user129148

0

хорошей практикой для организации презентаций является использование автобуса событий. ведущие регистрируются на автобусе и прислушиваются к событиям, на которые им нужно реагировать. другие ведущие бросают события на автобусе, чтобы сообщить о возможных целях, что они просто сделали. Сообщение должно быть основано на предметной области, а не технический (например, «продукт 123 создан»)

good example является архитектурой GWT MVP и the newer version.

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