带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)

简介: 带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)

带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)https://developer.aliyun.com/article/1338304?groupCode=taobaotech

实现代码示例如下

 实现代码示例如下

 

  @implementation TBPipelineManager
  - (TBPipelineManager *(^)(id<TBPipelineDataCreatorDelegate> dataCreator))addDataCreator {
  @weakify
  return ^(id<TBPipelineDataCreatorDelegate> dataCreator) {
  @strongify
  if (dataCreator) {
  [self.dataGenArr addObject:dataCreator];
 }
 return self;
 };
 }
- (TBPipelineManager *(^)(id<TBPipelineDelegate> pipeline))addPipeline {
  @weakify
  return ^(id<TBPipelineDelegate> pipeline) {
  @strongify
  if (pipeline) {
  [self.pipelineArr addObject:pipeline]; 20
  //每一次add的同时,我们做链式标记(通过runtime给每个处理加Next)
  if (self.pCurPipeline) {
  NSObject *cur = (NSObject *)self.pCurPipeline;
  cur.tb_nextPipeline = pipeline;
 }
 self.pCurPipeline = pipeline;
 }
 return self;
 };
 }
  - (void)setThrowDataBlock:(void (^)(id _Nonnull))throwDataBlock {
  _throwDataBlock = throwDataBlock; 34
  @weakify
  //Creator的数组,依次对 Block 回调进行赋值,当业务方调用此 Block 时,就是开始处理数据的时候
   [self.dataGenArr enumerateObjectsUsingBlock:^(id<TBPipelineDataCreatorDelegate> _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  obj.generateDataBlock = ^(id<TBPipelineBaseDataProtocol> data, NSInteger dataId) {
  @strongify
data.dataId = dataId;
//开始递归处理数据
[self handleData:data];
   -  (void)handleData:(id)data {
[self recurPipeline:self.pipelineArr.firstObject data:data];
}
- (void)recurPipeline:(id<TBPipelineDelegate>)pipeline data:(id)data { if (!pipeline) {
return;
}
//递归让pipeline处理数据@weakify
[pipeline receiveData:data throwDataBlock:^(id _Nonnull throwData) { @strongify
NSObject *cur = (NSObject *)pipeline; if (cur.tb_nextPipeline) {
[self recurPipeline:cur.tb_nextPipeline data:throwData];
} else {
!self.throwDataBlock?:self.throwDataBlock(throwData);
}
}];
}
@end



 


 

 

image.png处理单元 Pipeline 包含的功能和特点:

1. 因为数据是基于业务的,所以它只被声明为一个 Protocol ,由上层实现。

 

API 代码示例如下

 

1 @protocol TBPipelineDelegate <NSObject>
2 //如果有错误,直接抛出
3 - (void)receiveData:(id)data throwDataBlock:(void(^)(id data))block;
4 @end

 

上层业务代码示例如下

//以A类型码码处理单元为例@implementation TBGen3Pipeline
- (void)receiveData:(id <TBCodeDataDelegate>)data throwDataBlock:(void (^)(id data))block { TBScanResult *result = data.scanResult;
NSString *scanType = result.resultType;
NSString *scanData = result.data;
if ([scanType isEqualToString:TBScanResultTypeA]) {
//跳转逻辑
...
//可以处理,终止递归BlockInPipeline();
} else {
//不满足处理条件,继续递归:由下一个 Pipeline 继续处理PassNextPipeline(data);
}
}
@end

image.png业务层调用

设置标签

有了上述的框架和上层实现,生成一个码处理管理就很容易且能达到解耦的目的,代码示例如下

- (void)setupPipeline {
//创建 manager 和 creator
self.manager = TBPipelineManager.new; self.dataCreator = TBDataCreator.new;
//创建 pipeline
TBCodeTypeAPipelie *codeTypeAPipeline = TBCodeTypeAPipelie.new; TBCodeTypeBPipelie *codeTypeBPipeline = TBCodeTypeBPipelie.new;
//...
TBCodeTypeFPipelie *codeTypeFPipeline = TBCodeTypeFPipelie.new;

 

11

 

12

 

//往 manager 中链式添加 creator 和 pipeline

13

 

@weakify

14

 

self.manager

15

 

.addDataCreator(self.dataCreator)

16

 

.addPipeline(codeTypeAPipeline)

17

 

.addPipeline(codeTypeBPipeline)

18

 

.addPipeline(codeTypeFPipeline)

19

 

.throwDataBlock = ^(id data) {

20

 

@strongify

21

 

if ([self.proxyImpl respondsToSelector:@selector(scanResultDidFailedProcess:)]) {

22

 

[self.proxyImpl scanResultDidFailedProcess:data];

23

 

}

24

 

};

25

}

 

 

 带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(4)https://developer.aliyun.com/article/1338239?groupCode=taobaotech

 

相关文章
|
3月前
|
人工智能 自然语言处理 开发工具
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
本文介绍统一多模态 Transformer(UMT)在跨模态表示学习中的应用与优化,涵盖模型架构、实现细节与实验效果,探讨其在图文检索、图像生成等任务中的卓越性能。
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
|
3月前
|
人工智能 安全 Cloud Native
Nacos 3.0 架构升级,AI 时代更安全的 Registry
随着Nacos3.0的发布,定位由“更易于构建云原生应用的动态服务发现、配置管理和服务管理平台”升级至“ 一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台 ”。
|
4月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
224 0
|
13天前
|
人工智能 Cloud Native 中间件
划重点|云栖大会「AI 原生应用架构论坛」看点梳理
本场论坛将系统性阐述 AI 原生应用架构的新范式、演进趋势与技术突破,并分享来自真实生产环境下的一线实践经验与思考。
|
17天前
|
存储 JSON 数据处理
ClkLog埋点与用户行为分析系统:架构升级与性能全面提升
随着越来越多企业在实际业务中使用 ClkLog,数据规模和分析需求也不断提升,部分用户日活已经超过10万,为了顺应这一趋势,ClkLog 秉持 “开放透明、持续演进”的理念,推出了迄今为止最重要的一次性能优化升级。新版本在大规模数据处理与复杂查询场景中,性能表现实现了跨越式提升。经过多轮研发与严格测试,新版本现已正式上线:在原有付费版 1.0 的基础上架构全面升级,并同步发布全新的 2.0 版本。为用户带来更强的性能与更广的适用场景。
|
19天前
|
机器学习/深度学习 人工智能 vr&ar
H4H:面向AR/VR应用的NPU-CIM异构系统混合卷积-Transformer架构搜索——论文阅读
H4H是一种面向AR/VR应用的混合卷积-Transformer架构,基于NPU-CIM异构系统,通过神经架构搜索实现高效模型设计。该架构结合卷积神经网络(CNN)的局部特征提取与视觉Transformer(ViT)的全局信息处理能力,提升模型性能与效率。通过两阶段增量训练策略,缓解混合模型训练中的梯度冲突问题,并利用异构计算资源优化推理延迟与能耗。实验表明,H4H在相同准确率下显著降低延迟和功耗,为AR/VR设备上的边缘AI推理提供了高效解决方案。
238 0
|
3月前
|
人工智能 数据可视化 Java
什么是低代码(Low-Code)?低代码核心架构技术解析与应用展望
低代码开发正成为企业应对业务增长与IT人才短缺的重要解决方案。相比传统开发方式效率提升60%,预计2026年市场规模达580亿美元。它通过可视化界面与少量代码,让非专业开发者也能快速构建应用,推动企业数字化转型。随着AI技术发展,低代码与AIGC结合,正迈向智能化开发新时代。
|
3月前
|
存储 人工智能 缓存
AI应用爆发式增长,如何设计一个真正支撑业务的AI系统架构?——解析AI系统架构设计核心要点
本文AI专家三桥君系统阐述了AI系统架构设计的核心原则与关键技术,提出演进式、先进性、松耦合等五大架构法则,强调高并发、高可用等系统质量属性。通过垂直扩展与水平扩展策略实现弹性伸缩,采用多类型数据存储与索引优化提升性能。三桥君介绍了缓存、批处理等性能优化技术,以及熔断隔离等容灾机制,构建全链路监控体系保障系统稳定性。为构建支撑亿级业务的AI系统提供了方法论指导和技术实现路径。
362 0
|
3月前
|
消息中间件 人工智能 安全
企业级AI应用需要系统工程支撑,如何通过MCP大模型架构实现全链路实战解构?
本文三桥君深入探讨了MCP大模型架构在企业级AI应用中的全链路实战解构。从事件驱动、统一中台、多端接入、API网关、AI Agent核心引擎等九个核心模块出发,系统阐述了该架构如何实现低耦合高弹性的智能系统构建。AI专家三桥君提出从技术、内容、业务三个维度构建评估体系,为企业级AI应用提供了从架构设计到落地优化的完整解决方案。
212 0

热门文章

最新文章