Где лучшее место для функции, используемой на многих контроллерах, использующих VIPER?

Я использую шаблон VIPER в своем приложении Swift. Мне нужна функция, которая выполняется во многих контроллерах, чтобы открыть cardViewStyle. Я не знаю, куда лучше добавить эту функцию...

Может быть вариант использования? Interactor?, обычный... Не забывая о VIPER и чистой архитектуре

Теперь функция находится в контроллере представления, в презентере и каркасе... потому что вызывается только один раз.

Функция будет выглядеть так:

//Presenter
func showLikeCard(controller: UIViewController){ 
     wireframe.showLikeCard(controller: controller)
}

//Wireframe
func showLikeCard(controller: UIViewController){ 
     controller.present()
}

Спасибо!


person user3745888    schedule 23.01.2020    source источник
comment
Лучшее средство для преодоления подобных проблем — это POP (протокольно-ориентированное программирование) nofollow noreferrer">medium.com/@dheerajneelam/   -  person Nouman    schedule 29.01.2020


Ответы (1)


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

  • Зона просмотра предназначена для всего пользовательского интерфейса. Поскольку ваша общность, вынесенная из нескольких контроллеров представления UIViewController, связана с пользовательским интерфейсом, она должна быть помещена в карантин в зоне просмотра. Несмотря на ваш //Presenter комментарий, похоже, это не имеет ничего общего с соблюдением бизнес-правил в зоне докладчика VIPER. (Если это так, то межзональный интерфейс должен быть переработан так, чтобы он ссылался исключительно на объекты домена приложения, не ссылаясь на ориентированные на пользовательский интерфейс конструкции, такие как UIViewController, потому что сам UIViewController не имеет ничего общего с соблюдением бизнес-правил.) Это разделение проблемы заключается в том, как VIPER устраняет проблему чрезмерного смешения всей архитектуры Massive View Controller из-за недостаточного карантина и недостаточного отделения проблем друг от друга.
  • Он не находился бы в зоне взаимодействия, если бы не собирал данные из базы данных, сети или датчика.
person Andreas ZUERCHER    schedule 12.04.2021