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形式引入,并且能够独立 ...
随机推荐
- ZOJ Monthly, March 2018
A. Easy Number Game 贪心将第$i$小的和第$2m-i+1$小的配对即可. #include<cstdio> #include<algorithm> usin ...
- The Water Bowls [POJ3185] [开关问题]
题意 一串长度为20的0,1数列,每次翻转i,会影响i-1,i+1,也被翻转,最少翻转成0的步骤数是多少? Sample Input 0 0 1 1 1 0 0 1 1 0 1 1 0 0 0 0 0 ...
- 【自动化测试】使用Java+selenium填写验证码成功登录
这是我第一次发博客,若有问题,请多多指教! 本次是为了帮忙解决,如果在平时自动化遇到有验证码填写的情况,我们如何成功登录情况. 思路: 首先我们先将验证码复制并保存成一个图片,然后使用tesserac ...
- Linux shell编程语法
由于条件判断和循环跟其他语言都大同小异,学过编程的话很好理解,这里只贴出格式,不具体写用法了.(select菜单会详细讲一下) 条件判断 if条件判断 普通if条件判断: if 判断条件1; then ...
- JavaFile I/O
Java流类图结构: 流的概念和作用: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.及数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将抽象为各种类,方便更直观 ...
- ECMA Script 6_模块加载方案 ES6 Module 模块语法_import_export
1. 模块加载方案 commonJS 背景: 历史上,JavaScript 一直没有模块(module)体系, 无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来. 其他语言都有这项功能: ...
- macos解决Hadoop之Unable to load native-hadoop library
很显然,native-hadoop library不支持macos,如果是Linux就不会有这个问题.在百度上搜了,要下载在macos上编译的native hadoop library,我在网上下载了 ...
- 使用ajax分页查询
controller: /** * 查询所有用户/查找指定用户 * 分页+搜索 * */@RequestMapping("/findClientBySize")@ResponseB ...
- SQL语句之on子句过滤和where子句过滤区别
1.测试数据: SQL> select * from dept; DEPTNO DNAME LOC ------ -------------- ------------- ...
- mongoVUE破解与配置、Mongodb数据库安装
一.mongoVUE 1.5.3破解: 1) 开始-运行-regedit-搜索:B1159E65-821C3-21C5-CE21-34A484D54444 2.) 然后把1,2,3项数值删除,然后重新 ...