Предположим, что у вас есть кросс-платформенное приложение. Приложение работает на Android и iOS. Ваш общий язык на обеих платформах - Java. Как правило, вы должны написать свою бизнес-логику в Java и всю свою специфическую часть интерфейса в Java (для Android) и Objective-C (для iOS).
Обычно, когда вы реализуете шаблон MVP в кросс-платформе, кросс-языковое приложение, вы должны иметь модель и презентатор на Java и предоставлять Java-интерфейс для ваших представлений, который известен вашим докладчикам. Таким образом, ваши общие Java-презентаторы могут взаимодействовать с любой реализацией вида, которую вы используете в определенной части платформы.
Предположим, мы хотим написать приложение iOS с Java-частью, которую позже можно будет использовать с тем же Android-приложением. Вот графическое представление дизайна:
С левой стороны находится Java-часть. В Java вы пишете свои модели, контроллеры, а также интерфейсы представления. Вы делаете все проводки, используя инъекцию зависимостей. Затем код Java можно перевести на Objective-C с помощью J2objc.
С правой стороны у вас есть часть Objective-C. Здесь ваш UIViewController
может реализовать интерфейсы Java, которые, если они переведены в протоколы ObjectiveC.
Проблема:
То, что я боюсь, - это то, как происходит переключение между представлениями. Предположим, что вы находитесь на UIViewControllerA, и вы нажимаете кнопку, которая должна привести вас к UIViewControllerB. Что бы вы сделали?
Случай 1:
Вы сообщаете о нажатии кнопки на Java ControllerA (1) UIViewControllerA, а Java ControllerA вызывает Java ControllerB (2), который связан с UIViewControllerB (3). Тогда у вас есть проблема, с которой вы не знаете со стороны контроллера Java, как вставить UIViewControllerB в иерархию вида Objective-C. Вы не можете справиться с этим со стороны Java, потому что у вас есть только доступ к интерфейсам View.
Случай 2:
Вы можете сделать переход на UIViewControllerB независимо от того, является ли он модальным или с помощью UINavigationController или что-то еще (1). Затем сначала нужен правильный экземпляр UIViewControllerB, который привязан к Java ControllerB (2). В противном случае UIViewControllerB не смог бы взаимодействовать с Java ControllerB (2,3). Когда у вас есть правильный экземпляр, вам нужно сказать Java ControllerB, что был обнаружен View (UIViewControllerB).
Я все еще борюсь с этой проблемой, как обращаться с навигацией между разными контроллерами.
Как смоделировать навигацию между различными контроллерами и обрабатывать кросс-платформу. Соответственно просматривать изменения?