【发布时间】:2015-07-27 20:15:53
【问题描述】:
假设您有一个跨平台应用程序。该应用程序在 Android 和 iOS 上运行。您在两个平台上的共享语言是 Java。通常,您会用 Java 编写业务逻辑,而所有 UI 特定部分都用 Java(适用于 Android)和 Objective-C(适用于 iOS)。
通常,当您在跨平台、跨语言应用程序中实现 MVP pattern 时,您将拥有 Java 中的模型和演示者,并为您的视图提供演示者已知的 Java 接口。这样,您的共享 Java 演示者可以与您在平台特定部分上使用的任何视图实现进行通信。
假设我们想要编写一个带有 Java 部分的 iOS 应用程序,该部分以后可以与同一个 Android 应用程序共享。这是设计的图形表示:
左侧是 Java 部分。在 Java 中,您编写模型、控制器以及视图接口。您使用依赖注入进行所有接线。然后可以使用J2objc 将Java 代码转换为Objective-C。
右侧是 Objective-C 部分。在这里,您的UIViewController 可以实现翻译成ObjectiveC 协议的Java 接口。
问题:
我苦苦思索的是视图之间的导航是如何发生的。假设您在 UIViewControllerA 上,并且您点击了一个按钮,该按钮应将您带到 UIViewControllerB。你会怎么做?
案例一:
您将按钮点击报告给 UIViewControllerA 的 Java ControllerA (1),Java ControllerA 调用链接到 UIViewControllerB (3) 的 Java ControllerB (2)。然后你有一个问题,你不知道从 Java 控制器端如何将 UIViewControllerB 插入到 Objective-C 视图层次结构中。您无法从 Java 端处理它,因为您只能访问 View 接口。
案例 2:
您可以转换到 UIViewControllerB,无论它是模态的还是使用 UINavigationController 或其他 (1)。然后,首先您需要绑定到 Java ControllerB (2) 的 UIViewControllerB 的正确实例。否则 UIViewControllerB 无法与 Java ControllerB (2,3) 交互。当您拥有正确的实例时,您需要告诉 Java ControllerB 视图 (UIViewControllerB) 已显示。
我仍在努力解决如何处理不同控制器之间的导航问题。
如何对不同Controller之间的导航进行建模并适当处理跨平台View的变化?
【问题讨论】:
-
我认为 Spring MVC 是一个很好的方法。他们有一个执行上下文来存储整个请求处理的数据,下一个要执行的视图/动作按名称(字符串)映射并在运行时决定。这样,在 Android Java 应用程序中,您可以有一个控制器将点击请求的处理委托给 ObjC。它返回要执行的下一个视图/动作的名称,并且控制器会做出正确的反应。
-
能否更具体一些并展示一些抽象的示例代码?
-
参见此处tutorialspoint.com/spring/spring_mvc_form_handling_example.htm StudentController 对 Context 进行任何操作(它使用
@ModelAttribute从其中获取一个 bean,但整个上下文只是名称-值对的映射。然后以 @ 响应987654329@ 对“结果”的引用一无所知。应该是StudentController实际上是在其上运行的真实控制器的代表,根据 @987654331 决定下一步做什么@value.result可以是一个jsp页面的名字,另一个action... -
@eduyayo SpringMVC 是一个用于 Web 的服务器客户端框架。这与我的问题无关。这对我有什么帮助?
-
您问的是“一种方式”...这是一种方式...我没有说您必须通过嵌入 tomcat 对其进行编程。这是一种方式……你明白吗?
标签: android ios objective-c swift j2objc