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

提供网站建设教学视频建设厅网站总经济师是干什么的

提供网站建设教学视频,建设厅网站总经济师是干什么的,中国建设银行官网首页网站,朝阳周边网站建设介绍 假设现在需要实现一种功能: 从某个远程的组件(消息队列或远程文件)拉取最后几条记录做一个展示. 需要支持如下的组件: Kafka RocketMQ OSS 假设还有很多, 这里不列了 … 显然, 每种组件需要的参数各不一样, 那么此时如何使用一个统一的结构来表达这些组件的参数呢?…

介绍

假设现在需要实现一种功能: 从某个远程的组件(消息队列或远程文件)拉取最后几条记录做一个展示.

需要支持如下的组件:

  • Kafka

  • RocketMQ

  • OSS

  • 假设还有很多, 这里不列了 …

显然, 每种组件需要的参数各不一样, 那么此时如何使用一个统一的结构来表达这些组件的参数呢?

刚遇到这个这个需求时, 感觉它和 Java 里常遇到的 多态JSON 序列化很像(确实).
但在实践中, 我们这份配置需要被多种编程语言的程序使用, 我们需要考虑各个语言解析多态JSON的难度.
因此我们尽量选择一种简单的通用的做法, 不依赖特殊的json特性, 也就是本文介绍的方法2.

方法1 使用通用 map 结构

这也是一种常见做法.

使用 map<string, object> 结构来存储相关参数, 同时约定加入一个字段 type = “组件名”, 使得使用者知道是哪个组件.
比如

{"type": "kafka","brokers": ["aaa", "bbb"],"topic": "xxx-topic","advancedOptions": {"auth": {...}}
}

优点:

  1. 序列化简单
  2. 添加新类型不用修改结构体
  3. 没有使用特殊的 json 特性

缺点:

  1. 弱类型: 操作没有静态类型方便
  2. 遇到嵌套结构时, 处理起来有点麻烦 …

如果你要将这种方式与静态类型结合, 那么通常避免不了要反序列化 2 次: 先把 type 解析出来知道具体类型, 然后再对着具体类型反序列化一次.

如果这个行为不频繁, 那反序列化 2 次完全是可以接受的.

方法2 使用静态类型

{"type": "kafka","kafka": {// 这里存放 kafka 特有的配置"brokers": ["aaa", "bbb"],"topic": "xxx-topic","advancedOptions": {"auth": {...}}}
}

想要解析这个json的人最好准备一个 class 去承担反序列化

class FromComponent {// type 的取值是 kafka / rocketMQ / oss// 当然也可以约定枚举值必须是大写, 从而使用 KAFKA ROCKET_MQ OSS// 总之 type 能和 具体的字段对上就行String type;KafkaConf kakfa;RocketMQConf rocketMQ;OSSConf oss;// 将来可能继续增加 ...
}

优点:

  1. 静态强类型
  2. 只需要反序列化一次

缺点:

  1. 使用的时候需要先判断 type 再去取对应的字段值 (不算是缺点, 其他方案也未必能少得了这个步骤 或者判断 instanceOf)
  2. 由于是静态类型, 在 FromComponent 里需要写上所有可能得 type 以及这些 type 对应的配置结构体, 如上面的 kafka/rocketMQ/oss …
  3. 添加新类型时需要到这里加字段

我觉得上面的缺点都不算特别不可接受.
当需要修改或新增类型时, 最大的工作肯定不是在于配置描述, 而是在对应的处理实现上.

其他

如果你曾经尝试过 Java 里的多态JSON序列化, 那么你可能会遇到如下的表示法:

{"type": "kafka""from": {kafka的配置...}
}
{"type": "oss""from": {oss的配置...}
}
{"kafka": {kafka的配置...}
}
{"oss": {oss的配置...}
}

这种方法在实践中可以解决序列化问题, 但实际使用的时候依旧少不了 instanceOf, 总之你需要先判断一下再转类型到子类.
那跟方法2里的先判断一下 type 再选取对应的字段, 理论上没有任何区别.
而且要注意方法2不需要json框架支持多态反序列化.

http://www.yayakq.cn/news/667195/

相关文章:

  • 网站开发是叫系统吗专门做孕婴用品的网站
  • 网站做半透明度的优势网站网站建设公司上海
  • 建设领域信用系统网站厦门网站建设报价
  • 购物网站建设的目的上海建设网站
  • 怎么让自己的网站通过域名访问不了罗湖网站设计
  • 南宁网站建设团队客户关系管理系统功能
  • 商丘做网站公司成都住建局官网地址
  • 洛阳网站的优化浙江省住房和城乡建设厅网站查询
  • 南阳医疗网站制作价格西海岸新区城市建设局公示网站
  • 北京市住房和城乡建设部网站官网西安官网优化哪家公司好
  • 四川建设公司网站总部基地网站建设
  • 青岛做网站哪家专业爱采购
  • 粉红色主题 模板 网站 在线预览网页设计实训报告保利集团
  • 东莞 企业网站建设网站备案可以做电影网站吗
  • 为何网站建设公司报价不同百度快照怎么弄
  • 山东网站备案网站网站建设需求调查问卷
  • php快速建站系统东莞网站外包
  • 大朗网站建设培训h5网页制作方法
  • 网站不换域名换空间高端网站建设 房产
  • 网站后台编辑器控件下载网站建设专家工作总结
  • 建站平台免代码wordpress 注册邮件
  • 自己做网站推广在那个网站网站建设社区交流
  • 网站建设报价 东莞华为手机官网入口
  • 运河建设管理网站酒生产企业网站建设的目的
  • 企业网站的设计要点wordpress 标题编辑器
  • 凡科做的网站百度收不收录wordpress双数据库
  • 东莞企业网站信用网站建设
  • 做网站还能赚钱吗网站标题 关键字怎么设置代码
  • 工会网站建设请示wordpress 做管理系统
  • 专业网站建设培训机构大数据营销案例