第3章:基础面试 · iOS组件化开发原理

本章聚焦大厂面试中组件化与模块化的区分、组件通信方式,以及回答框架(定义→对比→实现方案)。核心在于展现你对架构分层、解耦、可维护性的理解深度,而非简单背诵概念。

1. 定义 2. 对比 3. 实现方案 模块化:业务/功能内聚,独立编译 组件化:技术解耦+服务聚合,插件化 粒度不同 | 通信方式不同 | 依赖关系不同 URL Router / Target-Action / Protocol-Class 大厂加分:架构分层+解耦

🎯 知识结构速览

维度 模块化 组件化
粒度 业务功能独立,通常为一个文件夹或Target 更细粒度,可独立打包、发布、复用
通信方式 直接引用/继承/通知 URL Route / Target-Action / Protocol
依赖关系 有编译依赖,耦合较高 无直接依赖,通过中间件解耦
大厂偏好 中小项目,快速迭代 大型App,多人协作,动态部署

📚 面试问答卡(3题)

❓ 问题1:组件化与模块化的核心区别是什么?

🎯 考察点:基础概念辨析、架构思维、是否理解解耦本质

📋 回答框架:定义 → 三个对比维度(粒度、通信、依赖) → 大厂场景举例

✅ 示例回答(60字左右):
模块化按业务或功能划分代码组,内部可交叉引用;组件化则将每个组件视为独立单元,通过中间件通信,实现零编译依赖。以首页和个人中心为例,模块化下互相import,组件化则通过URL路由跳转,便于独立发布和动态化。
  • 🔍 可能追问:实际项目中你们组件间如何传递数据?跨组件通知怎么处理?
  • ⚠️ 避坑提醒:不要只背概念,要结合你参与的具体项目举例;区分“组件化”与“模块化”时,重点说解耦程度和独立构建的能力。

❓ 问题2:组件间通信有哪些主流方式?各有什么优缺点?

🎯 考察点:方案选型能力、底层原理理解、对性能/安全/可维护性的权衡

📋 回答框架:分别介绍3种方式(URL Router、Target-Action、Protocol-Class)→ 各自适用场景 → 你的推荐

✅ 示例回答(80字左右):
URL Router适用于页面跳转,配合注册中心可以动态路由,但参数传递依赖序列化;Target-Action利用运行时消息转发,解耦彻底但风险略高;Protocol-Class通过接口约定,编译安全,适合核心业务组件。个人推荐Protocol方案+配合注册表,既安全又灵活。
  • 🔍 可能追问:Target-Action是如何避免字符串硬编码的?如果组件未注册,你怎么做降级处理?
  • ⚠️ 避坑提醒:不要只罗列方案而不说权衡;提到URL Router时要讲清楚参数序列化限制和动态性 vs 类型安全的矛盾。

❓ 问题3:你在组件化项目中如何做架构分层与解耦?

🎯 考察点:实际落地经验、分层设计能力、解耦方法论(是否理解“中间层”的重要性)

📋 回答框架:说明分层结构(基础层→通用中间件→业务组件层)→ 解耦手段(依赖注入/接口下沉)→ 举例说明

✅ 示例回答(90字左右):
我们采用四层架构:基础层(网络/存储)→ 中间件层(路由/日志/埋点)→ 通用业务组件(登录/分享)→ 场景组件(首页/个人中心)。依赖方向严格向下,上层通过Protocol调用下层服务,下层不感知上层。例如首页Feed组件通过IMGSProtocol获取图片,隔离SDK实现。
  • 🔍 可能追问:如何保证组件升级不影响其他组件?组件版本冲突如何解决?你们用CocoaPods还是其他工具?
  • ⚠️ 避坑提醒:不要只说“分层好”,要具体说你做过哪些抽象(比如抽离了通用中间件)。如果从0到1做过组件化,要强调迁移过程和遗留问题处理。

🚨 本章核心提醒:大厂面试中“组件化”不是问你怎么用三方库,而是考察架构思维、解耦设计、组件间通信的安全性。回答时要先建立清晰的框架(定义→对比→实现),再用真实项目细节举例,避免空泛理论。