产品能力
页面的千行千面(千人千面),包含同一个页面不同布局、不同字段、不同样式
数据模块的千行千面(千人千面),根据不同身份执行不同的业务技术逻辑和服务编排
page一键创建,在没有新的业务组建和新的module情况无需开发接入,0代码上线,运营同学自行配置页面。
前端组件复用,在没有新前端组件,前端无需参与开发,后端只需编写module对应的业务接口。
实现module可复用,module数据渲染、数据写入,查询条件、浮层、半推页面、页面操作
新增字段扩展0代码,模型字段可以自定义,动态扩展,可定义来自本地数据库、远程HSF接口数据
环境可隔离,测试、预发、生产
平台和业务代码分离,业务上线只需关注业务逻辑本身的代码。
DO DTO可定义,动态映射
数据枚举动态定义,动态绑定
产品界面
用户
产品模块
核心逻辑
模型设计
template定义
page定义
page_code
custom_dimension
biz_code
sub_biz_code
enviroment
module定义
public class McubeContextAware implements ApplicationContextAware {
private static volatile ApplicationContext alc;
private ModuleBeanFactory moduleBeanFactory;
private ModuleGroupBeanFactory moduleGroupBeanFactory;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
alc = applicationContext;
}
public void init(){
setModuleBeanMap();
setModuleGroupBeanMap();
}
private void setModuleBeanMap() {
Map<String, McubeModuleExecutor> beanMap = alc.getBeansOfType(McubeModuleExecutor.class);
if (beanMap != null) {
beanMap.values().stream().forEach(m -> {
McubeModule module = AnnotationUtils.findAnnotation(m.getClass(), McubeModule.class);
if (module != null) {
String code = module.code();
String name = module.name();
if (code != null) {
moduleBeanFactory.getMcubeBeanMap().put(code, m);
}
}
});
}
}
private void setModuleGroupBeanMap() {
Map<String, McubeModuleExecutor> beanMap = alc.getBeansOfType(McubeModuleExecutor.class);
if (beanMap != null) {
beanMap.values().stream().forEach(m -> {
McubeModuleGroup module = AnnotationUtils.findAnnotation(m.getClass(), McubeModuleGroup.class);
if (module != null) {
String code = module.code();
String name = module.name();
moduleGroupBeanFactory.getMcubeBeanMap().put(code,m);
}
});
}
}
}
执行单元(moduleGroup executor)
/**
* Created by hzliuxuan on 2022/5/27.
* @author hzliuxuan
* 模块接口
*/
public interface McubeModuleExecutor<T,V> {
/**
* 填充数据,页面渲染,一般是read接口
* @param value
* @return
*/
T populate(V value);
/**
* 编辑模块
* @param value
* @return
*/
void edit(V value);
/**
* 写接口
* @param value
* @return
*/
void add(V value);
/**
* 删除接口
* @param value
* @return
*/
void delete(V value);
}
@Inherited
@Component
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface McubeModuleGroup {
/**
* moduleGroup code (必填,唯一标识)
*/
@NotNull
String code();
/**
* 对应module code值
*/
@NotNull
String[] moduleCodes();
/**
* moduleGroup name
*/
String name();
@NotNull
ModuleGroupType type();
}
field定义
[
{
"key": "equityInvestment",
"value": null,
"label": null,
"name": "权益投放记录",
"text": null,
"width": null,
"lock": null,
"copyEnable": null,
"copy": null,
"sortable": null,
"tooltip": null,
"wordBreak": null,
"fieldMapper": null,
/**数据类型取值input, select, date, address(地址), switch(开关), staffSelector(花名选择),textArea,upload(上传)**/
"dataType": "input",
private String dataType;
"format": null,
"dataSource": null,
"dataUrl": null,
"required": null,
"unit": null,
"readOnly": false,
"isHidden": false,
"multiple": false,
"features": null,
"showTime": null,
"maxLength": null
}
]
page 数据结构
public class McubePageBeanDTO {
/**
* 页面编码
*/
@CrmOperateLogBizCode
private String pageCode;
/**
* 业务线
*/
private String bizCode;
/**
* 配置类型
*/
private TemplateTypeEnum templateType;
/**
* 配置模块
*/
private List<McubeModuleBeanDTO> originalModules;
/**
* 配置字段
*/
private Map<String, List<McubeField>> originalFields;
/**
* 实例的模块
*/
private List<McubeModuleBeanDTO> instanceModules;
private List<String> instanceModulesList;
/**
* 实例的字段
*/
private Map<String, List<McubeField>> instanceFields;
private String subBizCode;
/**
* 元页面version
*/
private Byte originVersion;
/**
* 实例version
*/
private Byte instanceVersion;
/**
* module version
*/
private Byte moduleVersion;
/**
* 属性集合
*/
private List<Property> properties;
///**
// * 显示的模块
// */
//private List<String> instanceModulesList;
private Boolean isCache;
@Data
public static class Property {
/**
* property
*/
private Boolean checkable;
private Boolean isEdit;
private Boolean selectable;
private Boolean isLeaf;
private Boolean isAdd;
private Boolean isDelete;
private String showType;
private Integer level;
private String extendedField;
}
}
运行时类设计图
阿里云产品评测—阿里云容器镜像服务 ACR
免费试用体验面向容器镜像、Helm Chart 等符合 OCI 标准的云原生制品安全托管及高效分发平台,发布你的评测更有机会获得千元机械键盘,限量定制礼品。
点击阅读原文查看详情。