Model View Presenter - один и тот же вид, разные докладчики
Я создаю одно приложение для Android с использованием MVP, и у меня есть один вопрос об этом шаблоне.
Скажем, у меня есть один экран для создания нового человека. Этот экран покажет один EditText
для ввода имени, другой для фамилии, один ImageView
показать выбранную фотографию и т. д. Это приведет к одному View
интерфейс, реализованный Fragment
, Будет сотрудничать с одним Presenter
интерфейс, реализованный другим классом.
Хорошо.
Теперь у меня есть еще одна особенность: экран для редактирования существующего человека. Как это происходит, View
для этой функции идентична той, что для создания нового человека. Тем не менее Presenter
это отличается. Он начнется с загрузки существующего человека из базы данных, чтобы предварительно заполнить представление текущими данными, и действие над базой данных при нажатии "сохранить" будет обновлением, а не вставкой.
Итак, я думаю, что это пример MVP, где один View работает с разными реализациями докладчика для достижения разных вариантов использования.
Как вы думаете, это правильное предположение, или вы думаете, что разные функции должны иметь разные
View
а такжеPresenter
интерфейсы?Кроме того, если вы с общим
View
и разныеPresenters
Будет ли реализацияView
быть распространенным, или это приведет к тому же интерфейсу, реализованному двумя классами? На практике я вижу два варианта.Имея только один
Fragment
реализацияView
, В зависимости от того, собирается ли пользователь создать нового человека или обновить существующего, фрагмент должен получить и использовать другого предъявителя.Имея два
Fragment
s. Каждый из них будет создавать разныеPresenter
, Используйте композицию или наследование, чтобы избежать репликации кода между двумя фрагментами.
Как вы думаете, что лучше делать в этих случаях?
Благодарю.
1 ответ
Вы столкнетесь с этим при создании CRUD-подобного приложения с использованием шаблона MVP на Android.
Вы можете очень просто иметь единственное представление, если вы хорошо документируете в своем классе, что оно подразумевает "представление" для двух разных докладчиков, тогда это "хорошо"
Я бы лично предложил создать 2 вида, один для "создания" и один для "редактирования" (они могут быть одинаковыми (на данный момент), но их разделение дает понять, что они - разные вещи).
Вы можете легко увидеть ситуацию в будущем (или другое следствие этого шаблона), когда ваши представления "создать" и "редактировать" на самом деле имеют разные API. Или слегка отличающиеся визуальные подсказки, такие как кнопка с надписью "создать / добавить" в одной и "обновить" в другой.
Я лично сделал бы класс библиотеки представлений / помощника, из которого оба представления извлекают логику. Это должно помочь вам уменьшить общий LoC, даже если вы выполняете 2 вида "просмотра". Преимущество этого состоит в том, что вы легко можете изменить представления Create/Edit, не беспокоясь о влиянии на другое. (Я склонен думать, что 2 вида файлов легче поддерживать в будущем, когда есть даже небольшая разница между Create/Edit)