Правила Swift Viper Interdictor и Presenter для проверки данных
У меня есть несколько вопросов. Какой лучший способ использовать интерактор:
Допустим, в перехватчике я сохраняю некоторые данные, но хочу проверить эти данные и показать следующее предупреждение:
self.presenter?.showAlert(with: "All fields are required for adding exercise.".localized)
Первый вопрос - это нарушение Viper? И нужно ли проверять данные в презентере, прежде чем передавать их перехватчику?
Другой вопрос: мне нужно использовать функцию
showAlertFillIssue
вместо передачи текста?
Даже скажем, я передам это от presenter
в случае нарушения interactor
,
2 ответа
Как описано в https://TheSwiftDev.com/the-ultimate-viper-architecture-tutorial,
- зона взаимодействия предназначена исключительно для получения объектов от датчиков, базы данных или сетевых протоколов или для передачи объектов в базу данных или сетевые протоколы.
- И наоборот, зона презентатора предназначена для выполнения всех бизнес-правил / логики. Иногда присутствуют оттенки серого (как указано ниже), но общее правило состоит в том, что обнаружение не всех полей, заполненных должным образом, будет в презентаторе, отделенном от концепций базы данных и от концепций пользовательского интерфейса.
- ShowAlert лучше всего рассматривать как что-то полностью находящееся в зоне просмотра, потому что, в зависимости от ОС, это может быть предупреждение для одной ОС, но некая конструкция пользовательского интерфейса без предупреждения в другой ОС. Лучше всего думать о VIPER как о том, как это действие будет выглядеть во всех других ОС (кроме iOS), таких как, по крайней мере, MacOS, но также Android и UWP (или другая инфраструктура пользовательского интерфейса, помещенная в карантин в зоне просмотра, например Qt). Было бы лучше перефразировать showAlert как emitError или balkBack в более общем виде, не обращая внимания на то, что на самом деле представляет собой конструкция пользовательского интерфейса в этой ОС. Аналогичным образом, showAlertFillIssue и любое другое конкретное действие пользовательского интерфейса лучше всего помещать в карантин полностью в зоне просмотра, вдали от докладчика (бизнес-правила) и от интерактора (получение и хранение сущностей).
Привет с Viper Architechture, Интеррактор содержит бизнес-логику. Так что при проверке ваших данных. Вы можете вызвать метод вашего докладчика, чтобы отобразить сообщение об ошибке. Вы можете определить перечисление для обработки ошибок и передать его в методы showAlert.
self.presenter?.showAlert(with: FormError.AllFieldRequired)