iOS 组件化漫谈
1.准备工作
由于工程越来越大,里面的文件也越来越多。很多时候merge代码的时候工程文件起了冲突之后,若 .xcodeproj文件冲突 打开之后很难以修改。
架构其实相对开发来说还是比较难于下手的东西,概念谁都知道,就是组织好,管理好,使用好自己的代码(代码规范也是重要的一环)
故想到了模块化程序,于是乎就去网上找资料
蘑菇街 安居客 Small (里面都有demo,安居客的看后之后简单一点)
1.1 大致差不多就是URL的格式 scheme://host/path?query
1.启动的时候注册相应的url host为相应的模块名
2.需要的时候直接使用路由调用url的方法
2.CTMediator概述(现未生成子工程,所以是以文件夹的方式代替工程)
2.1 分为三个部分
壳工程:整个程序的入口 一个产品一个壳工程。壳工程中可随意加子工程(无论多少个),主要用于净化业务。
主工程:lib库(网络工具,相册工具,文件服务,路由)
确立一个一个主工程。保证到时候将主工程移动到任何壳工程中都能使用,不致于一拖到工程中就到处报错,然后这里改改,那里删删
子工程:即模块工程
子工程要保证其独立性,这里所说的独立性是其依赖主工程的前提下,于其他子工程互不引用,即a子工程删掉,b子工程照常运行。
每次项目可归并到子工程中,因为子工程一般是按模块分的,而且子工程内部用那种架构(MVC,MVVC...)都是可以的.
2.2 CTMediator工作原理
1. + (instancetype)sharedInstance;
路由单例对象
2. - (id)performActionWithUrl:(NSURL *)url completion:(void(^)(NSDictionary *info))completion;
调用之后可返回一个控制器对象,传入url的格式如 hgl://message/chat?key=value (message:自模块名,chat:具体要指向的控制器)
3. - (id)performTarget:(NSString *)targetName action:(NSString *)actionName params:(NSDictionary *)params;
该方法比方法2更加快捷,可以让开发人员更加快速的理解 [self performTarget:@"message" action:@"chat" params:@{@"key":@"value"}];
4.所有模块都必须有一个路由接收器(即入口)
4.1接收器类名 Target_模块名 (Target 也可以换成你喜欢的单词 定义好之后告诉其他人就行,别人也好按照这个规范来)
4.2接收器里面的方法名 - (UIViewController *)Action_xx:(NSDictionary *)param; (xx 代表某个控制器)
iOS 组件化漫谈的更多相关文章
- 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形式引入,并且能够独立 ...
- 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注册方案据我了解很多大公司都在采用,蘑菇 ...
随机推荐
- 设计模式03备忘录(java)
先贴代码有空来写内容. 备忘录1 //简单的备忘录,只可以记录上一次修改前的状态,实现撤回一次的操作. class Student{ private String name; private Stri ...
- 什么是IIFE
立即执行函数表达式(Immediately-invoked function expression) IIFE 我们知道,在javascript(ES5)中,是没有块级作用域的概念的.看一个例子 fo ...
- android 自定义控件——(二)圆形按钮,圆形View
----------------------------------↓↓圆形按钮,圆形View(源代码下有属性解释)↓↓---------------------------------------- ...
- kindle型号
这篇文章为 Kindle 新手解决三个问题:怎么辨别Kindle 型号?通过 Kindle 外观判断准确吗?Kindle序列号在那里? 贴吧吧友提问的原话"在咸鱼看到一台,那哥们说也不知道K ...
- mysql操作入门基础之对数据库和表的增删改查
一.数据库管理-- 1.登陆数据库 mysql -u root -p; -- 2.查看数据库服务器所有数据库 SHOW DATABASES; -- 3.创建数据库 CREATE DATABASE My ...
- Spring bean依赖注入、bean的装配及相关注解
依赖注入 Spring主要提供以下两种方法用于依赖注入 基于属性Setter方法注入 基于构造方法注入 Setter方法注入 例子: public class Communication { priv ...
- JavaSe:Properties文件格式
Properties文件格式说明 Properties继承自Hashtable,是由一组key-value的集合. 在Java中,常用properties文件作为配置文件.它的格式是什么样的呢? 下图 ...
- SQLite使用(三)&&核心API使用
概述 SQLite提供了一系列接口供用户访问数据库,主要包括连接数据库,处理SQL,迭代查询结果等.本文会针对我们使用SQLite的主要场景,列出核心的API,详细介绍API的用法并给出代码用 ...
- 实时跟踪log变化的工具Apachetop
作为一个网站管理员,我们经常会有需要知道当前什么人正在访问我们的网站,谁正在频繁的抓取我们网站的内容,什么搜索引擎正在抓取我们网站?面对这些问题,我们虽然可以去查看log日志文件,但是却不能让我们实时 ...
- 【转】XenServer架构之XAPI
一.XAPI对资源池的管理 作为XenServer的管理工具集,XAPI管理XenServer的主机,网络和存储.不管是OpenStack还是CloudStack,如果使用XenServer作为虚拟化 ...