Чистая архитектура - должен ли диспетчер разговаривать с ведущим?

В Clean Architecture от Robert Martin, скажем, у меня есть эта упрощенная версия (не показывающая другие вещи, такие как Model, Gateway, Boundaries)

enter image description here

Теперь скажем, что у меня есть View с 2 кнопками, Dark и Light, что при щелчке следует изменить цвет фона View и показать текст на экране (цвет текста всегда должен быть синим). Так что я хоть что-то вроде этого:

enter image description here

Предполагая, что я должен использовать один метод в контроллере для обеих кнопок (возможно, потому, что это была форма или что-то еще), переменная button в buttonClicked(button) будет содержать информацию о том, будут ли Dark или Light.

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

Итак, должен ли контроллер сообщить ведущему, какой цвет (т.е. кнопка) был выбран, или я должен передать эту информацию в Interactor только для того, чтобы передать ее в Presenter? Помните, что Interactor даже не будет использовать эту информацию.

Ответ 1

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

Например, если представление HTML, просматриваемое в браузере, вы просто используете javascript для прослушивания нажатия кнопки и изменения цвета. Презентатор нужен только для преобразования ответа из вашего примера использования в модель представления (текст в приведенном выше примере). Модель представления затем используется представлением для визуализации данных, основываясь на выбранном им формате.

То, что вы, возможно, захотите также посмотреть, это ПОЧЕМУ вы предоставляете разные цвета. Вероятно, вы пытаетесь указать какое-либо состояние вашей системы пользователю с помощью выбора цвета. В этом случае нажатие кнопки, вероятно, будет представлять интерес для варианта использования, например. возможно, нажатие кнопки означает, что элемент на сайте электронной торговли помечен как отправленный.

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

Затем ваш прецедент вернет презентатору ваш текст и отправит = true. Затем презентатор будет отправлен = true на вашу модель просмотра. Тогда вид изменит цвет в зависимости от того, был ли отправлен true или false в модели представления.