去中心化方案,解决App JS Plugin插件层级问题

206 阅读2分钟

最近在开发关于人员选择器的cordova插件遇到了一个项目结构层级问题需要扩展

一.目前的层级结构

插件目前.png

1.首先我们业务UI层肯定是处于CommoneWeb基础层之上的,及业务Module层依赖CommonWeb层。

2.目前所有的CordovaPlugins插件都是处于Common web基础层,但是我们的人员选择器插件OrganizationPlugin确实强依赖于Contact模块定义的用户,群组,部门等数据信息的。所以将造成CommonWeb层的插件又反向依赖于业务Module层。造成循环依赖的问题

二.期望的目标结构

目标结构.png

1.CommonWeb层只定义一些基础的CordovaPlugins;同时提供一个PluginRegister单例供业务UI注册一些强业务相关的Cordova插件。

2.WebPage在初始化时,将基础CordovaPlugins+PluginRegister中注册的Cordova插件一起初始化到WebPage插件。

3.App初始化是,在联系人业务层模块将OrganizationPlugin的生成CallBack函数,通过ModulePluginRegister注册到CommonWeb层。注意只是注册一个caller函数,由CommonWeb层在进入web页面时通过调用caller函数才生成真正的OrganizationPlugin实例

三.模块化与组件化对比

ceshi1.png

模块化将CordovaWeb封装为一个模块,所有关于web页面的操作包括所有的Plugin都可以集成到webModule模块,但是这种方案需要其他业务数据支持,比如IMPlugin需要IM模块的Message数据增删查改支持,OrganizationPlugin需要联系人模块的数据支持。所以我们需要将Message模块的数据操作抽离到Service层,成立一个单独的MessageService专门管理Message模块数据的增删查改。Contact 模块的数据操作需要抽离成ContactService层,供上层所有UI模块层共用。基于以上各个模块都抽离了自己的DataService后,WebModule也就能基于这些DataService进行对应的Message,Contact的数据操作了。

ceshi2.png

组件化首先需要让Commonweb支持Plugin插件注册的能力,IMPlugin,OrganizationPlugin分别从Message模块,Contact模块注册到CommonWeb层。CommonWeb只保留最基础Cordovaweb能力,后续可打包成基础组件扩展到其他App共用。