组件化,在工程组成结构角度讲,也可称为模块化。最终目的是为了解藕。
本文总结了组件间交互方式及原理,不涉及到组件化具体实现。
语言分类
编译型语言、解释性语言
- 编译型语言
- 只编译一次,把源代码生成机器语言,之后直接运行。
- 代表:C、C++
- 特点:执行效率高,跨平台型差
- 解释型语言
- 不需要编译,每次运行时进行翻译
- 代表:JavaScript、Python、PHP、Perl、Ruby
- 特点:良好的平台兼容性,性能相对较低
- 编译型+解释型
- 代表:Object-C、Java
- 原因:分为两步-编译和执行
2.1 编译:将源代码编译为中间字节码
2.2 执行:虚拟机将中间字节码翻译成机器码
动态语言、静态语言
- 动态语言
- 概念:在程序运行时,可改变自身结构
- 代表:Object-C、C#、JavaScript、PHP、Python、Erlang
- 静态语言
- 运行时,自身结构不可变
- 代表:Java、C、C++
通讯方式分类
大致分为四类:反射、RPC、URL Scheme、注册中心
反射
反射机制,通过类字符串,动态创建对象。
例如:
NSString *name = @"ViewController";
Class cls = NSClassFromString(name);
UIViewController *vc = [[cls alloc] init
Class<?> clasz = Class.forName("com.example.Demo");
Object object = clasz.newInstance();
RPC
各组件作为单独服务存在,通过远程调用进行通讯。
代表:微服务、JavaScript
URL Scheme
比较特殊方式,在移动端常用
[[UIApplication sharedApplication] openURL:[NSURL URLWithSting:@"***://***"]];
Uri data = Uri.parse("urlschemel://auth_activity");
Intent intent = new Intent(Intent.ACTION_VIEW,data);
startActivityForResult(intent, RESULT_OK);
注册中心
在各个端最常用通讯方式。
创建独立中间件,记录组件注册信息,达到组件间通讯目的。
- 利用key值调用
- 较简单,只维护注册表。通过key值得到对应组件信息,动态创建。
- 代表:Android-ARouter
- URL方式调用
- 较复杂,维护注册表和协议解析。优点是可根据不同协议,做定制处理。
- 代表:iOS-MGJRouter,SpringCloud-Eureka
Target-Action
特殊的一种类型,根据动态语言定制方式。由runtime运行时动态创建对象。
例如:iOS-CTMediator
网友评论