iOS爱康APP组件化架构
iOS爱康APP组件化架构
随着公司业务需求的不断增加以及快速产出,要对应用的架构做相关的设计和优化,使可以快速复用扩展、减少耦合、减少开发时间成本、减少测试成本等。基础框架架构就是为解决这些问题所设计的。
二、设计
对公司业务、功能进行梳理分析,然后对相关模块进行切割分层。我们的基础框架架构设计思路是按照纵向切割,横向切割及立体扩展三方面下手:
基于纵向切割:针对各业务模块、各功能模块的单一业务和单一功能进行封装,防止对于非自己职责范围的业务和功能的依赖。
基于横向切割:针对业务层级,功能层级、基础依赖层级进行分层,方便使用者从不同的层级去集成。
基于立体扩展:方便快速集成扩展输出APP。
具体基础框架架构设计如下图所示:
三、实现
对上图的基础框架架构设计的基础功能模块层,UI组件层及业务模块层相关分层实现细节及注意事项详细说明,具体如下:
1.网络组件
主要是对AFNetworking以及JSONModel进行封装,实现单一的方法进行网络请求以及解析成相应的数据model。并且可以很方便的设置请求类型以及访问的哪一处服务。
2.UI工具组件
主要封装了Masonry、SDWebImage、MJRefresh,实现了对系统UI控件的封装以及自定义,封装VC的父类,方便各个组件继承使用API。包含工具包、基类包、类别包、还有所有用到的宏。
3.路由中间件
采用了Target-Action方案,使用runtime配合NSInvocation实现了页面间任意跳转以及调用任意类的实例方法以及类方法,实现部分业务逻辑的URL路由跳转,以及AppDelegate钩子,用于解耦繁重的AppDelegate。
4.弹窗组件
用于各种页面弹出loading、toast、alert等等以及各种角度的弹出View,方便整个APP进行调用。
5.资源组件
封装所有UI页面用到的图片以及字体,全部资源统一管理。方便排查重复图片以及更换更新图片资源。
6.按钮组件
通过对UIControl的封装实现自定义按钮,可以对按钮的图文位置进行编译以及实现不通状态下各个属性颜色的变化。
7.环境变量
主要是用于封装网络环境的配置以及网络环境的变量,方便APP在DEBUG阶段可以任意切换测试、UAT、预生产、生产等环境,以及可以根据POD不同的环境变量组件实现组件内网络环境是相应APP的。
8.辅助功能组件
主要用于组件间所用到的相同的功能点,进行单独的抽离封装。使功能更加单一。
9.业务组件
业务模块专注单一,当前功能模块可能会依赖不同的辅助组件,对其功能做多样化扩展方便适配不同的APP,接口以及调用方式简单化,方便中间件对其进行初始化以及跳转,对不同的业务功能组件进行解耦避免依赖。
四、架构优化注意事项
无论封装什么样的模块,注意这几个设计原则:复用、依赖倒置、单一、接口隔离
使用简单化、耦合减少化、复用扩展化。
对于组件间接口的封装避免使用代理回调
对于第三方组件以及SDK,尽量对其接口进行封装隔离后再调用,避免因为第三方更新方法废弃或者更新造成大面积改动
iOS爱康APP组件化架构相关推荐
- App组件化架构设计实践V1.0
1.基本概念与共识 业务组件化(或者叫模块化)作为移动端应用架构的主流方式之一,近年来一直是业界积极探索和实践的方向.在组件化过程中我们深刻体会到"没有绝对正确的架构,只有最合适的架构&qu ...
- iOS开发之组件化架构漫谈
前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...
- 得到、微信、美团、爱奇艺APP组件化架构实践
一.背景 随着项目逐渐扩展,业务功能越来越多,代码量越来越多,开发人员数量也越来越多.此过程中,你是否有过以下烦恼? 项目模块多且复杂,编译一次要5分钟甚至10分钟?太慢不能忍? 改了一行代码 或只调 ...
- 单文件组件的组件传值_移动端组件化架构(下)
我的组件化方案 对于项目架构来说,一定要建立于业务之上来设计架构.不同的项目业务不同,组件化方案的设计也会不同,应该设计最适合公司业务的架构. 架构设计 以我之前公司项目为例,项目是一个地图导航应用, ...
- 案例精选 | 蘑菇街、滴滴、淘宝、微信的组件化架构解析
导读:前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬 ...
- vue2.0 class声明组件_案例精选 | 蘑菇街、滴滴、淘宝、微信的组件化架构解析
导读:前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬 ...
- 蘑菇街、滴滴、淘宝、微信的组件化架构解析,附Demo和PDF
前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目?.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还 ...
- 如何通过 Vue+Webpack 来做通用的前端组件化架构设计
目录: 1. 架构选型 2. 架构目录介绍 3. 架构说明 4. 招聘消息 目前如果要说比较流行的前端架构哪家强,屈指可数:reactjs.angularjs.emberj ...
- App 组件化/模块化之路——如何封装网络请求框架
App 组件化/模块化之路--如何封装网络请求框架 在 App 开发中网络请求是每个开发者必备的开发库,也出现了许多优秀开源的网络请求库.例如 okhttp retrofit android-asyn ...
最新文章
- 2022-2028年中国电力行业节能减排投资分析及前景预测报告
- RDKit入门与进阶教程(30篇)
- DIV CSS left right top bottom定位
- GetClientRect()和GetWindowRect()
- 我害怕接入IM云的开发者
- opentrace在mysql中使用_采用OpenReplicator解析MySQL binlog
- UVA - 548 Tree
- 同事说rar压缩有风险,让我用zip压缩文件
- 自监督学习的一些思考
- C++学习随笔之一:基础
- Java中使用JNA实现全局监听Windows键盘事件
- 母亲节html页面,[母亲节散分]模块化思想的重要性_html/css_WEB-ITnose
- python求圆柱体的体积_Python 常见优化技巧,让你的程序溜溜的跑起来!
- 防火墙——NAT穿越(IPSec3)
- 安卓开发 JAVA环境配置
- ubuntu14.04下安装tun/tap
- 炸了~Redis bigkey导致生产事故-bigkey问题全面分析
- UNITY3D MMO开发指南(Lua)
- python高考考题_假如高考考python编程,这些题目你会几个呢?
- springMVC-RESTful约束下dispatcher拦截对象优化