GWT & MVP - Лучшие практики для отображения / редактирования сложных объектов? - PullRequest
2 голосов
/ 04 марта 2011

Все примеры GWT / MVP, о которых я узнал, кажутся слишком упрощенными, чтобы дать четкое представление о том, каковы лучшие практики в отношении отображения и обработки немного более сложных объектов модели.

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

Например, предположим, что у нас есть:

PresenterX - получает объект 'модель', скажем, любой объект с неизвестным числом различных примитивов или любым другим

ViewX - должен показывать объект модели в таблице и / или разрешать его редактирование / повторное сохранение

... так, чтобы это звучало очень, очень просто.Но мы не знаем количество полей в объекте модели, которое нам нужно будет отобразить.Так что это может относиться к динамическому количеству строк / столбцов.Вероятно, нет проблем для стола ... но как докладчик должен передать это в таблицу представления?Как объект модели, который представление понимает, или разбить его на кучу списков ... что представление, по сути, все еще должно понимать.

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

Наконец, скажем, есть кнопка «сохранить» в представлении ... кто работает, чтобы выяснить все строкив таблице которые были изменены?

Мне кажется, что представление должно либо лучше понимать модель, либо докладчик должен по-настоящему понимать представление - ни один из них не является хорошим MVP :( ... Или, возможно, должен быть какой-то посредникobject.

Я знаю, что есть несколько полезных и более полезных способов для такого рода вещей (Editors / RequestFactory и т. д.), но я ищу предложения по вышеописанному.

1 Ответ

1 голос
/ 04 марта 2011

Насколько я понимаю, MVP - это линия с точками MPV.Таким образом, P взаимодействует с обоими, но M и V только с P.

Кроме того, одной из целей проектирования MVP является наличие тестируемых P и M, что означает, что V должен быть заменен на фиктивную версию.Таким образом, V не должен предоставлять какие-либо зависящие от реализации интерфейсы (например, HasClickHandlers вместо Button).

Теперь, если V отображает общую таблицу, вы должны создать общие методы: addColumn(..) для определения столбцов и addRow(..) для добавления данных.Новый CellTable довольно гибкий и поддерживает динамическое добавление столбцов.

Об изменениях - V должен уведомить, P должен действовать.Кроме того, есть новые Editors, которые, IMHO, не очень хорошо вписываются в MVP, но должны быть просты в использовании.

...