Skip to content

nowto/page-modularization

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

app经常有一个页面组合了多个模块的内容。

针对这种页面有两种方案: 1. 前端针对某个模块分别调用多个接口,在前端渲染出一个完整的页面 2. 前端调用一个接口,该接口返回了整个页面所需的所有模块内容

该jar针对的是第二种方案,以下称为方案二。

假如以json形式返回内容,方案二有两种返回格式如下:

{
    modules: {},
    module1 : {},
    module2: {},
    ...
}
例如:
{
    navigationBar: {},
    main: {},
    footer:{}
}
modules: [
    {
        moduleName: "module1",
        moduleEntity: {}
    },
    {
        moduleName: "module2",
        moduleEntity: {}
    },
    ...
]
例如:
modules: [
    {
        moduleName: "navigationBar",
        moduleEntity: {}
    },
    {
        moduleName: "main",
        moduleEntity: {}
    },
    {
        moduleName: "footer",
        moduleEntity: {}
    },
]

本jar采用格式2。 同时因为前端只有拿到moduleName时,才知道moduleEntiry该怎么解析, moduleEntity可以以嵌套json字符串返回。

采用格式2有如下好处:

模块经常变化,比如顺序调整,比如某个模块不再需要了需要删除。 采用格式1,需要android、ios、h5三端都需要修改代码发布新版本。

采用格式2,就可以只后端改代码,三端除非有新模块的加入,那么不用改动在发布新版本。 当然,也可以将模块信息保存到数据库中,使运营人员来维护。

使用方法:

Map context = new HashMap();//ModuleFactory需要的条件从context中获取

RawModuleFactory navigationBarModuleFactory = new NavigationBarModuleFactory(); RawModuleFactory mainBarModuleFactory = ...; RawModuleFactory footerModuleFactory = ...;

ModulesFactory modulesFactory = new ModulesFactory(); modulesFactory.addModuleFactory(navigationBarModuleFactory); modulesFactory.addModuleFactory(mainModuleFactory); modulesFactory.addModuleFactory(footerModuleFactory);

//会在moduleEntity两端加双引号,以json字符串嵌套的方式返回,如果不需要,modulesFactory.getNormalModules(context); List<? extends JsonModule> pageModules = modulesFactory.getQuotedModules(context);

About

restfu接口返回的json模块化处理

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages