当前位置: 首页 > news >正文

使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——组合应用

在《使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——简单应用》中,我们看到了各种组合Handler的组件,如HandlerGroup和Layer。这些组件下面的子模块又是不同组件,比如LayerCenter的子组件是Layer。如果此时我们希望某个Layer只要执行一个HandlerGroup,还需要设计一个Divider来满足Layer的设计。这样就会导致整个框架非常难以使用。
为了解决这个问题,我们让所有组件(除了Divider)都继承了HandlerBaseInterface。

type HandlerBaseInterface interface {ConcreteInterfaceHandle(context *ghgroupscontext.GhGroupsContext) bool
}

这样我们就可以保证各个组件可以通过统一的接口调用。更进一步,我们在组织它们关系时,Handler、HandlerGroup、AsyncHandlerGroup、Layer和LayerCenter都是等价的,即它们可以相互替换。
举个例子,LayerCenter下每个Layer可以不是Layer,而是上述任何一个组件。
在这里插入图片描述
再比如Layer下每个组件,也不必是Handler,也可以上上述任何组件。

在这里插入图片描述
HandlerGroup、AsyncHandlerGroup下也不用是Handler,而是上述其他组件。
在这里插入图片描述
正是这种随意组合的特性,让这个框架更加灵活。

组合用法

在github中,我们展示了几个组合。其中一个配置如下。

# layer_center_main.yaml
type: LayerCenter
name: layer_center_main
layers: - layer_c- handler_group_e- async_handler_group_f- layer_g- example_layer_center_a- ExampleDHandler

运行结果如下:

layer_center_mainlayer_cExampleCDividerExampleC1HandlerExampleC2Handlerhandler_group_eExampleE1HandlerExampleE2Handlerasync_handler_group_fExampleF1HandlerExampleF2Handlerlayer_gExampleGDividerExampleG1HandlerExampleG2Handlerexample_layer_center_alayer_aExampleADividerExampleA1HandlerExampleA2Handlerlayer_bExampleBDividerExampleB1HandlerExampleB2HandlerExampleDHandler
run ExampleC2Handler
run ExampleE1Handler
run ExampleE2Handler
run ExampleF2Handler
run ExampleF1Handler
run ExampleG1Handler
run ExampleA2Handler
run ExampleB1Handler
run ExampleDHandler
http://www.lryc.cn/news/108653.html

相关文章:

  • DNS入门学习:DNS缓存的原理和作用(中科三方)
  • Linux虚拟机安装tomcat(图文详解)
  • Matlab对TMS320F28335编程--SVPWM配置互补PWM输出
  • MySQL数据库——多表操作
  • Java版本spring cloud + spring boot企业电子招投标系统源代码 tbms
  • css实现,正常情况下div从左到右一次排列,宽度超出时,右侧最后一个div固定住,左侧其他div滚动
  • 【Linux手动搭建Sftp,创建用户、用户组及删除用户】
  • 云上 Index:看「简墨」如何为云原生打造全新索引
  • Linux安装cuda和cudnn教程
  • 短视频矩阵源码
  • 群狼调研—连锁化妆品品牌门店神秘顾客调查的行家
  • C# 回文链表
  • 基于freertos的温湿度蓝牙系统
  • 华为云CTS 使用场景
  • 【css】nth-child选择器实现表格的斑马纹效果
  • 找视频素材就上这8个网站,免费可商用,马住了。
  • Springboot部署ELK实战
  • 【Leetcode】76.最小覆盖子串(困难)
  • C++ 指针函数和函数指针
  • JAVA实现存在更新不存在插入与及多余的进行删除(三)
  • iMX6ULL驱动开发 | OLED显示屏SPI驱动实现(SH1106,ssd1306)
  • 拥抱创新:用Kotlin开发高效Android应用
  • Effective Java笔记(20)接口优于抽象类
  • react学习笔记——1. hello react
  • 明明已经安装字体,但IDEA、CLION无法找到思源黑体/Source Hans Sans的问题解决
  • 2023-08-03力扣今日四题
  • 【学会动态规划】最佳买卖股票时机含冷冻期(15)
  • 随机RSI震荡指标公式(StochRSI),RSI和KDJ二合一
  • 轻松搭建酒店小程序
  • 算法通过村——Hash和队列问题解析