一种新型的系统设计解决方案:模块树驱动设计( 五 )


一种新型的系统设计解决方案:模块树驱动设计

文章插图
图片
 
4.2.4 模块配置找到模块上的配置,点击展开配置
一种新型的系统设计解决方案:模块树驱动设计

文章插图
图片
展开配置如下:
一种新型的系统设计解决方案:模块树驱动设计

文章插图
图片
上面的配置,是无需前端进行开发,只需要后端实现就好,后端代码:
@Data@ModuleConfig(configKey = "scm.wms.inbound.receive.oneBarcodeMuliSku", configName = "收货一码多品配置", module="scm.wms.inbound.receive")public class ReceiveScanOneCodeMoreSkuModuleConfig {@ConfigItem(itemName = "是否开启一码多品的拦截", itemRemark = "如果关闭, 一码多品的商品在收货时, 不会收到"该条码对应多个商品,请打印商品标签"的提醒, prd:https://poizon.feishu.cn/wiki/wikcnstRj3Qfbn4fXDrmvBk6R0d", defaultValue = https://www.isolves.com/it/cxkf/jiagou/2023-07-04/"true")private Boolean isOpen;@ConfigItem(itemName = "拦截方式", itemRemark = "如果配置强拦截,则必须打印商品标签, 阻断收货流程 。如果配置弱拦截, 只是提醒一下, 不阻断收货流程", scopeClass = InterceptType.class, defaultValue = "WEAK")private String interceptType;@ConfigItem(itemName = "拦截规则", scopeClass = InterceptRuleType.class, defaultValue = "ARBITRARY")private String interceptRule;} 
配置的几个java注解:
  • ModuleConfig
/** * 业务配置注解,业务配置是Module的字段 */@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ModuleConfig {/*** 配置的key*/String configKey();/*** 配置名称* @return*/String configName();/*** 配置描述,鼠标悬浮时的气泡提示* @return*/String configRemark() default "";/*** 是否必要,必要的不可以被剪枝* @return*/boolean cutAble() default false;} 
  • ConfigItem 配置属性
@Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ConfigItem {/*** 配置名称* @return*/String itemName();/*** 配置描述,鼠标悬浮时的气泡提示* @return*/String itemRemark() default "";/*** 默认值* @return*/String defaultValue() default "";/*** 如果你的取值范围是枚举指定枚举的全路径类名,* 如果你的取值范围是一种策略,指定策略的interfaces的全路径名称* @return*/Class<?> scopeClass() default Void.class;/*** 范围,默认通用,当你需要定制时才需要指定* @return*/ScopeType scopeType() default ScopeType.COMMON;/*** 自定义组件,需要前端参与开发,非特殊组件,无需设置,DSK会自动给你寻找组件* @return*/String customScopeType() default "";/*** 对位文本类型的配置,min则为文本长度限制的最小值* 对于数字类型的配置,min则为数字的最小值 。*/int min() default Integer.MIN_VALUE;/*** 对位文本类型的配置,min则为文本长度限制的最大值* 对于数字类型的配置,min则为数字的最大值 。*/int max() default Integer.MAX_VALUE;} 
5、MTDD与TMF的差别5.1 什么是TMFTMF 是 Trade Modularization Framework 的全称,即交易模块化框架,最初是交易系统中的一个代码模块,后来剔除业务耦合部分,独立出来成为一个实现业务与平台分离的业务框架 。
 
5.2 TMF架构
一种新型的系统设计解决方案:模块树驱动设计

文章插图
图片
(图片来源:https://www.cnblogs.com/shoshana-kong/p/14957739.html)
 
5.3 TMF2在架构设计上主要的思想
  1. 业务包与平台分离的插件化架构:平台提供插件包注册机制,实现业务方插件包在运行期的注册 。业务代码只允许存在于插件包中,与平台代码严格分离 。业务包的代码配置库也与平台的代码库分离,通过二方包的方式,提供给容器加载 。
  2. 全链路统一的业务身份:平台需要能有按“业务身份”进行业务与业务之间逻辑隔离的能力,而不是传统SPI架构不区分业务身份,简单过滤的方式 。如何设计这个业务身份,也成为业务间隔离架构的关键 。
  3. 管理域与运行域分离:业务逻辑不能依靠运行期动态计算,要能在静态期进行定义并可视化呈现 。业务定义中出现的规则叠加冲突,也在静态器进行冲突决策 。在运行期,严格按照静态器定义的业务规则、冲突决策策略执行 。


    推荐阅读