如何解耦
基于前端和后端的交互模式,去Model使用字符串传参,基于URL实现方法调用。
每个模块作为调用方的时候相当于一个客户端,作为被调用方的时候相当于一个服务端。
路由器
客户端如何通过URL和参数调用服务端的方法?我们可以通过路由器来实现。通过在路由器中注册对应的 path 和 实现类之间的映射关系。比如 fy://native/module/action。虽然不注册也可以调用(通过module名拿到类,通过action拿到方法,调用objc_msgSend)。如何去注册对应关系,可以通过让所有的服务实现类去继承一个类,如 XXXModule 通过运行时去获取XXXModule 的所有子类去注册。方法如何注册?这个可以参考Weex的实现。
服务发现
我想知道当前有哪些服务可以调用,要如何实现呢?去路由器里查看注册了哪些服务。方法注册基于Weex的实现稍微改造一下。我们就能够生成一个类似于Swagger文档一样的文档。当前有哪些服务、哪些方法、传什么参数,都可以找到。
其他App如何调用我们的服务
由于我们是使用路由方式实现的。可以很容易借助 URLScheme 和 universallink 实现通过其他应用调用我们的服务。参数回传 也可以通过 调用对方的 URLScheme 和 universallink 实现。
Flutter如何调用服务
可以写一个插件,在Native侧集成路由器,在Flutter侧把对应的 URL 和参数 封装成方法。在flutter模块引入这个插件,调用方法传参。
H5如何调用服务
写一个JSSDK,把服务对应的URL和参数封装一下,提供接口给业务方调用。在H5容器里,Native获取到JS传过来的参数通过路由器去调用对应的实现。