Правила Swift VIPER Interactor и Presenter для проверки данных

У меня есть несколько вопросов. Как лучше всего использовать интерактор:

Допустим, в интеракторе я сохраняю какие-то данные, но хочу проверить эти данные и показать следующий алерт:

self.presenter?.showAlert(with: "All fields are required for adding exercise.".localized)

First question is this violation of Viper? And do I need to check data in presenter before passing it to interceptor?

Another question: Do I need to use function showAlertFillIssue instead of passing text?

Даже допустим пройду от presenter в случае нарушения interactor.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
346
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Привет с Viper Architechture, Interractor содержит бизнес-логику. Итак, при проверке ваших данных. Вы можете вызвать метод из вашего докладчика, чтобы отобразить сообщение об ошибке. Вы можете определить перечисление для обработки ошибок и передать его методам showAlert.

self.presenter?.showAlert(with: FormError.AllFieldRequired)

Нет, зона интерактора предназначена для всех способов получения данных из баз данных, датчиков или сети. Зона докладчика предназначена для бизнес-логики. (Да, есть правила работы с базой данных, взаимодействия с датчиком и сетевого протокола, но это инфраструктурные правила, а не бизнес-правила домена приложения.)

Andreas ZUERCHER 07.04.2021 20:44

да, я согласен с @AndreasZUERCHER, что только один слой в VIPER должен контролировать это поведение. Который ведущий. Мы просто получаем некоторые данные от сервисов и возвращаем их обратно ведущему, который решает, что делать, проверять эти данные или выполнять другие действия.

Matrosov Oleksandr 07.04.2021 23:09
Ответ принят как подходящий

Как описано в https://TheSwiftDev.com/the-ultimate-viper-architecture-tutorial,

  • зона интерактора предназначена исключительно для получения объектов от датчиков, базы данных или сетевых протоколов или для отправки объектов в базу данных или сетевые протоколы.
  • И наоборот, зона докладчика предназначена для обеспечения соблюдения всех бизнес-правил/логики. Иногда бывают оттенки серого (как указано ниже), но общее правило заключается в том, что обнаружение не всех полей, заполненных должным образом, будет оторвано от концепций базы данных и от концепций пользовательского интерфейса.
  • ShowAlert лучше всего рассматривать как нечто полностью находящееся в зоне просмотра, потому что, в зависимости от ОС, это может быть предупреждение в одной ОС, но некоторая конструкция пользовательского интерфейса без предупреждения в другой ОС. Лучше всего думать о VIPER как о том, как это действие будет выглядеть во всех других операционных системах (кроме iOS), таких как, по крайней мере, MacOS, но также Android и UWP (или другой инфраструктуре пользовательского интерфейса, помещенной в карантин в зоне просмотра, такой как Qt). Было бы лучше перефразировать showAlert как emitError или balkBack в более общем смысле, не обращаясь к фактической конструкции пользовательского интерфейса в этой ОС. Аналогичным образом, showAlertFillIssue и любое другое конкретное действие пользовательского интерфейса лучше всего помещать в карантин в пределах зоны просмотра вдали от докладчика (бизнес-правила) и от интерактора (получение и хранение сущностей).

Другие вопросы по теме