iOS组件化之路(一)
写在最前
从开始学写代码,胡乱的看书,不懂如何写第一个程序,到开始写出第一个程序,这段道路有些漫长。慢慢开始自己独立的去分析给出的需求,到如何实现,最初的想法只是仅仅实现,到后来懂得如何利用自己技术和经验去解耦合。自从踏上移动端iOS开发的道路,就开始用过往的技术和经验去解耦合的道路,也看过各个论坛大牛的各种得意之作。总想着自己造个轮子,虽然不及前人优秀,总会从实践中提升自身的技术素养,也算是提高自身水平的一次次尝试吧。
初尝试
任何软件开发都需要一系列的入口(通常应该是main函数吧),而以往开发,会随着业务需求的增加使入口不断的膨胀,而且各个业务之间耦合的极其严重,到最后不得不去重构甚至重写代码。
iOS App经过系统创建进程以及一些列动作后,会交给UIApplicatonDelegate代理,而很多情况下,在代理中大量的冗余臃肿的代码使维护用来越难以梳理。我要解决的痛点是避免UIApplicatioinDelegate实现类的臃肿与冗余,各个模块视图之间实现松散的耦合,内部可以实现强聚合。
我的想法使构建一个封闭的UIApplicationDelegate代理对象(私有实现),通过两个配置文件和一个中心对象(EZAppEngine)来接管App控制权,在一个配置文件中基于JSON格式来生产根控制器以及根UIWindow对象,另一个配置文件(plist,以后的打算自己生产一个格式)来配置实现了给定接口(这里使OC的协议)的类。然后将UIApplicationDelegate得不同方法拆分成不同协议,这样子解决了UIApplicationDelegate本身的臃肿和冗余问题。接下来还有一个问题,就是各个页面(视图控制器和模态视图)之间解耦合,最初我使用一个封装的对象,通过传入类名和初始化方法以及参数,来创建页面,最终使用视图控制器来确定如何显示,这个方法虽然减少依赖,但是还是不够完善。路由思想本身来自Web端的工程,不同的路径请求被Web服务器分发到各个执行的类中,iOS也可以利用这种思想实现解耦合,并可以跟好解决了WebView和Navtive交互的问题。CocoaPods的出现通过依赖管理以及模块的路由机制,很好的解决解耦合、模块复用的问题,通过自动化CI,可以很容易的将各个不同的模块构建一个新的App.
模块化+POD私有库/公有库+CI总体结构
模块化结构
我定义了抽象的工具(EZToolUtilites), 网络封装(EZServiceUtilites), 核心(EZAppUtitlies)私有库,EZAppEngine中包含了接口协议定义以及对配置文件的解析,默认会使用当前{Target}.json和{Target}.plist,来完成启动工作,另外还定义了项目中经常使用的视图、视图控制器的类库。
接下来会通过合适的粒度对业务模块进行模块拆分,这个需要一定经验,对于产品可能不停的迭代和完善的过程。
胡乱写这么多,接下来继续完善自己的思路。:P
--
学无止境,逆水行舟不进则退,给自己加油!!!!!
iOS组件化之路(一)的更多相关文章
- iOS组件化思路 <转>
随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间的代码耦合,为了更好 ...
- iOS组件化思路-大神博客研读和思考
一.大神博客研读 随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间的 ...
- iOS 组件化 —— 路由设计思路分析
原文 前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高.为了更好的应对各种需求,开发人员从软件工程的角度,将App架构由原来简单的MVC变成MVVM,VIPER等复杂架构.更换适合业 ...
- iOS 组件化的几篇文章
随着工程的成长,开发人员的增多,合理的模块划分及低耦合的重要性显得愈发重要.最近在思考这方面的问题,也读了不少通过组件化解耦的文章,这里记录一下. 前 5 篇文章有些关联,建议阅读顺序,1.3.2.4 ...
- iOS 组件化方案
概述 近一年iOS业界讨论组件化方案甚多,大体来说有3种. Protocol注册方案 URL注册方案 Target-Action runtime调用方案 URL注册方案据我了解很多大公司都在采用,蘑菇 ...
- iOS 组件化
iOS 组件化介绍 随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间 ...
- 使用CocoaPods创建自己的私有库-iOS组件化第一步
目前iOS组件化常用的解决方案是Pod+路由+持续集成,通常架构设计完成后第一步就是将原来工程里的模块按照架构图分解为一个个独立的pod工程(组件),今天我们就来看看如何创建一个Pod私有库. 新建: ...
- iOS 组件化路由框架 WisdomRouterKit 的应用
[前言] 大家好,写作是为了和读者沟通交流,欢迎各位开发者一起了解 WisdomRouterKit SDK 的功能. 关于 iOS 组件化路由方案框架: WisdomRouterKit 的功能介绍,之 ...
- iOS组件化实现方案
作者原文iOS组件化 - 路由架构从0到1实战 合伙呀 1.CTMediator作为路由中间件 2.基础UI组件以pod形式引入,并且能够独立运行调试 3.基础工具组件以pod形式引入,并且能够独立 ...
随机推荐
- VsCode创建第一个vue项目
使用vue-cli快速构建项目 vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. 安装vue-cli之前,需要先安装了vue和webpack · node -v ...
- Kali Linux常用服务配置教程安装及配置DHCP服务
Kali Linux常用服务配置教程安装及配置DHCP服务 在Kali Linux中,默认没有安装DHCP服务.下面将介绍安装并配置DHCP服务的方法. 1.安装DHCP服务 在Kali Linux中 ...
- Buffer --缓冲器
一. 启动Buffer缓冲器 node 输入 buffer 创建一个新的buffer var buf = new buffer(''hello word) 查看buf的长度 buf.length 运行 ...
- CSS3_线性渐变_径向渐变----背景
渐变的本质: 绘制一张背景图片,所以使用 background 或者 background-image background 的诸多属性,渐变都是可以使用的(repeat,position) 百分比: ...
- [LeetCode] Largest Triangle Area 最大的三角区域
You have a list of points in the plane. Return the area of the largest triangle that can be formed b ...
- 全排列筛选(java)
蓝桥杯-全排列筛选(java) 蓝桥杯每年必考全排列筛选,一般为填空题: 可以使用for循环暴力破解,但是代码相对较长,也比较乱,不建议使用: 这里使用递归来解决,代码量相对较少,也很好理解: 如下为 ...
- hdfs directory item limit - (dfs.namenode.fs-limits.max-directory-items)
// :: WARN scheduler.TaskSetManager: Lost task , emr-worker-.cluster-, executor ): org.apache.hadoop ...
- ASP.NET Core 问题排查:Request.EnableRewind 后第一次读取不到 Request.Body
实际应用场景是将用户上传的文件依次保存到阿里云 OSS 与腾讯云 COS ,实现方式是在启用 Request.EnableRewind() 的情况下通过 Request.Body 读取流,并依次通过 ...
- 构建react项目失败解决办法
1.初始化项目,报下方错误 2.解决方法,更新淘宝镜像 npm config set registry https://registry.npm.taobao.org 3.在初始化项目 create- ...
- RoR - Action Pack
什么是Action Pack: Rest and Rails: Rest if all about resources rake routes: print out all routes