Зависимости модулей VIPER
Я работал над личным проектом, чтобы лучше понять архитектуру VIPER. Мне действительно нравится то, как я могу держать модули разделенными, делая код чище.
У меня все еще есть некоторые сомнения, когда дело доходит до зависимостей модулей:
У меня есть один модуль, который отвечает за отображение статистики на основе данных пользователя, а другой модуль отвечает за отображение некоторых прогнозов данных на основе статистики.
Мой ProjectionInteractor должен получить некоторые данные от StatisticsInteractor, так как я не хочу переопределять один и тот же материал дважды.
У меня уже есть слой DataManager, который по сути является CoreDataManager, но там нет никакой логики. Он просто используется Interactors для извлечения и обработки некоторых данных, ничего не зная о деталях сохраняемости.
1 ответ
- Если общность является бизнес-правилом домена приложения по своей природе, исключите эту общность, чтобы переместить его в зону докладчика, где все бизнес-правила домена приложения должны быть размещены в архитектуре VIPER.
- Но если общность по своей природе ориентирована на взаимодействующий элемент, вместо того, чтобы один интерактор запускал методы другого взаимодействующего элемента, вы бы вычленили общность между взаимодействующими элементами в библиотеку в зоне взаимодействия, которую будут вызывать несколько интеракторов. Эта библиотека может иметь несколько форм: либо служебный уровень (как в более традиционную эпоху), либо протокол для взаимодействующих устройств, которым необходимо унаследовать общность.
TL;DR: исключить общность. То, где выносить исключенную общность, зависит от темы / характеристик общности.