У меня есть простой пример:
Пользователь выбирает дату в календаре, затем эта дата указывается в метке. Если дата не указана или выбрана недопустимая дата, вместо нее должен быть помещен заполнитель.
Мой вопрос: какой из этих подходов лучше подходит для чистой архитектуры?
1) Отправьте объект Date из Presenter -> View, объект может быть нулевым. Просмотр решает, является ли дата нулевой, чтобы заполнить текст, а если нет, форматировать его.
Просмотр полностью определяет способ отображения интерфейса на основе полученной даты
2) Presenter отправляет отформатированную строку даты в View, но если она пуста, View устанавливает заполнитель. Presenter определяет формат значения, поскольку это бизнес-правило, но View решает, как данные отображаются графически, поэтому View определяет текст-заполнитель и компоненты, которые будут изменены. Предположим, что интерфейс может измениться на f.e. заполнитель помещается в другую метку, а поле даты остается пустым
3) Presenter дает команду View как установить текст даты, так и установить текст-заполнитель (известный только View, поскольку это статический текст). View получает информацию о том, что делать. Presenter точно знает, какие компоненты есть у View, и контролирует их. Но статические тексты являются компонентом интерфейса, поэтому Views решает, какой текст-заполнитель установить.
4) Presenter полностью определяет, что будет отображаться в пользовательском интерфейсе, View - это просто слой для подключения к компонентам пользовательского интерфейса, Presenter знает точно или в основном, как отображается View
Для меня Presenter должен управлять только общими событиями ввода и вывода из View, оставляя всю ответственность за View за то, как элементы рисуются, какие форматы используются и даже как извлекаются входные данные, так что если пользовательский интерфейс изменяется, ввод-вывод основного экрана используется кейсы останутся действительными в Presenter.
Однако я видел примеры кода, которые дают гораздо больший контроль докладчику, а пользовательский интерфейс - это просто каркасный способ рисования элементов и захвата пользовательского ввода.