归因组件ACE:订单归类技术解决方案( 二 )
导购归因是订单归类和优先级决策的组合 , 具体概括为以下四个步骤:
Step 1 :导购订单必须满足或不满足某些属性
例如 , 天猫优品导购订单必须满足天猫优品商品等属性 , 且不满足(过滤)本地履约订单等属性 。
Step 2 :不同属性组合成不同类型导购订单
例如 , 权益券导购订单 = 天猫优品商品订单 + 权益券订单 + ... + 非本地履约订单 + 非定向优惠订单 。
Step 3 :不同导购订单类型存在不同业务优先级
根据优先级规则决策哪种类型导购订单有效 。 例如 , 权益券导购订单优先级高于普通导购订单 。
Step 4 :根据归因结果执行不同处理流程
例如 , 订单判定为导购订单 , 执行落库、打标、消息推送等流程 。
进一步地 , 导购归因可抽象为“属性-分类-执行”问题 , 抽象模型如下:
- 属性校验器(Attributor):表示一种属性 。 校验是否满足某个属性 , 支持原子或组合属性 。
- 分类器(Classifier):表示一种类型 。 绑定一个或多个属性校验器 , 校验是否满足某些属性组合 。 分类器可分为嵌套分类器(NestedClassifier)和原子分类器(AtomicClassifier) 。 例如 , Classifier 1 需要满足多个 Attributor , Classifier 4 需要满足 Classifier 1 和 Classifier 2 。
- 执行器(Executor):表示一种类型对应的执行策略 。 绑定一个分类器 , 负责对某种类型执行处理 。
文章插图
图 3 :模型层次结构 Attributor-Classifier-Executor
? 归因组件基于现有业务场景 , 抽象了一种“属性-分类-执行”的技术模型 。 在通用模型基础上 , 设计了一种归因组件 ACE。 ACE 是 Attributor - Classifier - Executor 的缩写 , 旨在通过属性校验器(Attributor)、分类器(Classifier)和执行器(Executor)三层模型解决属性分类的通用性问题 。
整体设计
ACE 对外暴露统一服务接口 AceWorker , AceWorker 接收外部传入参数(归因场景 + 归因对象) , 根据归因场景获取分类器 , 并判断归因对象是否满足该分类器 。 分类器是 ACE 的核心 , 绑定了一个或多个属性校验器 , 并对应唯一的执行器 。
文章插图
图 4 :ACE 整体设计
详细设计
ACE 组件由 ACE 注解、ACE 工厂容器、ACE 初始化和 ACE 服务入口组成 , 详细设计如图 5 所示 。
ACE 注解
基于易用性考虑 , ACE 提供三种注解 @Attributor、@Classifier 和 @Executor 用于声明 ACE 组件 , 分别对应属性校验器、分类器和执行器 。
- @Attributor:声明一个属性校验器 , 属性校验器名称唯一 。
- @Classifier:声明一个分类器 , 分类器名称唯一 。 @Classifier 提供 matcher、filter 和 priority 三种属性 , matcher 用于指定该分类器需满足的属性校验器列表 , filter 用于指定该分类器需过滤的属性校验器列表 , priority 用于指定该分类器绑定的原子分类器的优先级规则 。
- @Executor:声明一个执行器 , 每个分类器对应一个执行器 , 执行器名称需与分类器名称一致 。
AceFactory 是 ACE 的工厂容器 , 负责管理所有定义的 ACE 组件 , 包括属性校验器集合、分类器集合及其绑定的属性校验器集合、执行器集合 。 根据 ACE 组件名称可直接从 AceFactory 获取对应的 ACE 组件 。
ACE 初始化
借助 AceInitService 初始化 ACE 组件 , 应用启动时 AceInitService 自动解析 ACE 注解 , 并将 ACE 组件注册到 ACE 工厂容器 。
ACE 服务入口
AceWorker 是 ACE 的服务入口 , 负责对外提供 ACE 通用服务 , 如属性校验 attribute、分类 classify 和执行 execute。
文章插图
图 5 :ACE 详细设计
示例
1)定义属性校验器
定义属性校验器 A, 判断是否满足属性 A。
/** * 属性校验器示例 ATTRIBUTOR_A * @author haoyu.chy * @date 2020/9/5 */@Attributor(name = "ATTRIBUTOR_A")public class AttributorA implements IAttributor {@Overridepublic AceResult attribute(AceContext aceContext) {if (满足属性A) {return new AceResult(true);}return new AceResult(false);}}
2)定义分类器定义原子分类器 CLASSIFIER_X(绑定属性校验器 ATTRIBUTOR_A ) , 判定是否满足类型 X。
/** * 原子分类器示例 * matcher:需匹配的属性 * filter:需过滤的属性 * @author haoyu.chy * @date 2020/9/5 */@Classifier(name = "CLASSIFIER_X", matcher = "ATTRIBUTOR_A", filter = "")public class ClassifierX implements AtomicClassifier {}
- Facebook|谷歌、Facebook未来几周将面临更多的反垄断诉讼
- 审查|Facebook超10亿美元收购Kustomer 该交易仍面临审查
- Twitter|Twitter的Audio Spaces测试包括转录、扬声器控制和报告功能
- 买下|罕见收购!Facebook花10亿多美金买下了一家ToB公司
- 反垄断|谷歌和Facebook或于明年1月在美面临新的反垄断诉讼
- realme官宣新旗舰“Race”将是首批搭载骁龙888机型
- 征收|加拿大计划2022年起对Facebook、谷歌等科技巨头征收数字税
- 权威|扎克伯格:Facebook将提供新冠疫苗权威信息
- 「第三期」 iOS 14 实用小组件合集,你最喜欢哪一个?
- 大小公司都适用的架构选型工具箱(涵盖上百个组件)