GWT & MVP - Лучшие практики для отображения / редактирования сложных объектов?
Все примеры GWT / MVP, о которых я узнал, кажутся слишком упрощенными, чтобы дать четкое представление о том, каковы лучшие практики отображения и обработки немного более сложных объектов модели.
Например, большинство примеров - это что-то вроде презентатора, который присоединяет обработчик кликов к нескольким текстовым полям в представлении... если нажать кнопку сохранения, вызывается функция save(), которая просто получает обновленные значения, и мы закончили, MVP стиль. Это не так реалистично, хотя.
Например, скажем, у нас есть:
PresenterX - получает объект 'модель', скажем, любой объект с неизвестным количеством различных примитивов или что-то еще
ViewX - должен показывать объект модели в таблице и / или разрешать его редактирование / повторное сохранение
... так что это звучит очень, очень просто. Но мы не знаем количество полей в объекте модели, которое нам нужно будет отобразить. Так что это может относиться к динамическому количеству строк / столбцов. Вероятно, нет проблем для стола... но как докладчик должен передать это в таблицу представления? Как объект модели, который понимает представление, или разбить его на кучу списков... что представление, по сути, еще должно понять.
Кроме того, некоторые поля могут быть редактируемыми, из которых неизвестны, пока мы не получим объект модели (скажем, что-то в модели определяет, какие поля можно редактировать) - так кто же должен отвечать за выяснение того, что редактируется или нет? Вероятно, докладчик, но как мы можем переосмыслить это, с точки зрения MVP?
Наконец, предположим, что в представлении есть кнопка "сохранить"... кто работает, чтобы выяснить все строки в таблице, которые были изменены?
Мне кажется, что представление должно либо лучше понимать модель, либо докладчик должен действительно понимать представление больше - ни один из них не является хорошим MVP:( ... Или, возможно, должен быть какой-то промежуточный объект.
Я знаю, что есть несколько полезных и более полезных способов для такого рода вещей (Editors/RequestFactory и т. Д.), Но я ищу предложения по поводу вышеизложенного.
1 ответ
Насколько я понимаю, MVP - это линия с точками MPV. Таким образом, P взаимодействует с обоими, но M и V только с P.
Кроме того, одна из целей проектирования MVP состоит в том, чтобы иметь тестируемые P и M, что означает, что V должен быть заменен имитируемой версией. Таким образом, V не должен предоставлять какие-либо интерфейсы, зависящие от реализации (например, HasClickHandlers
вместо Button
).
Теперь, если V должен показывать универсальную таблицу, вы должны создать универсальные методы: addColumn(..)
определить столбцы и addRow(..)
добавить данные. Новый CellTable
довольно гибкий и поддерживает динамическое добавление столбцов.
Об изменениях -V должен уведомить, P должен действовать. Также есть новые Editors
ИМХО, которые не очень хорошо вписываются в MVP, но должны быть просты в использовании.