iOS组件化困境与解耦方案探讨

1 下载量 19 浏览量 更新于2024-08-30 收藏 346KB PDF 举报
iOS组件化开发架构设计思考主要针对当前面临的问题进行深入探讨。在一个拥有35万行代码的iOS应用项目中,初期为了提高跨平台(iPad和iPhone)开发效率,项目采用了模块化的结构,包括DDEngine负责业务逻辑的网络请求和数据模型,DDDevLib作为私有开发库,ThirdSDKs管理第三方SDK,以及独立的UI组件DDMIX_UI。然而,随着产品线扩展和团队变动,缺乏组件化设计导致了复杂的业务模块依赖,具体表现为三类耦合:工程耦合、界面耦合和依赖耦合。 工程耦合体现在某些模块在运行时需要主工程的支持才能完整运作,这增加了修改成本,可能导致测试回归工作量大增。界面耦合则体现在硬编码的界面跳转,灵活性低且不易于维护。此外,由于项目主要基于Objective-C,与Swift的集成并不顺畅,这限制了开发效率和未来的演进。 针对这些问题,方案调研中考虑了两种业界常见的组件化架构: 1. URLRouter + ModuleMediator(如蘑菇街的Limboy方案) - 优点:基于URL的路由机制使得添加新模块相对简单,但维护URL路由表可能降低拓展性和可维护性,并且非常规对象难以直接调度,增加复杂性。 - 缺点:路由表通常保存在服务器,本地组件间调度依赖于URL,可能导致复杂度上升。 2. Target-Action + Runtime + Category(如安居客CasaTaloyum方案) - 优点:通过分离远程和本地调用,增强安全性,模块间的通信更加清晰。不过,模块间的接口调用存在硬编码问题,可通过维护针对DDMediator的Category来缓解。 - 缺点:模块调用依赖于明确的动作和目标,设计上需要确保调用方与响应方的角色区分。 为了改进项目,需要先进行组件化的改造,逐步向Swift和OC混合编程过渡,以简化代码维护、减少重复工作,提升开发效率。在这个过程中,开发者需要权衡不同架构的利弊,选择最适合项目需求的组件化策略,并确保遵循严格的编码规范,以降低耦合度,提高项目的整体质量和可维护性。