iOS组件化整体架构

说组件化的结构,是指整个项目工程使用组件化模式开发时,整个项目中包含的所有组件结构。而不是指某一个组件工程的结构。某一个组件工程的结构,理论上我们是不用关心的,但是为了代码风格统一,我们可以做一些要求。

组件颗粒度

那么,问题来了,一个项目应该怎么拆分组件呢?拆分多少个组件合适呢?按照什么标准进行组件的拆分呢?

这个问题只是抛出来,我不作回答。因为这个涉及到组件划分颗粒度的问题。这个颗粒度的把握,是需要沉淀的。对组件划分的太细会导致项目过于分散,划分粒度太大会引起项目组件臃肿。项目都是有一个发展过程的,组件也一样。所以,不断进行重构是掌握这个组件细化程度的最好方式。

但是,工作还是要进行,那么项目开始时,必须要定一个颗粒度!我的原则是:

• 抽出业务之外,即:不依赖业务的UI或方法函数,规划出不同的组件;

• 按需求业务,完成一个业务流程的,当成一个组件开发。若业务流程冗长且有分支的,可从分支处拆分成多个组件开发;

这只是雏形,还是需要组件重构沉淀出更好的颗粒度划分。

不管组件的颗粒度是大还是小,项目中组件必须是有层级结构的。有层级就表示了会有依赖,所以说项目组件化也是无法避免依赖关系的。准确来说是,项目组件化避免的是业务之间依赖,因为不同业务属于同一层级。我们定义同一层级的组件之间是不可以存在依赖关系的。

那么,该如何定义组件的层级结构呢?

我们是这样定义的:

首先,组件库分为五大部分:业务模块层、中间件层、部件层、定制层、基础层。

依赖关系是这样的:

• 业务模块层 → 中间件层

• 业务模块层 → 部件层→ 定制层→ 基础层

这样的依赖关系呈现,大家应该明白越向下底层的组件应该尽量少量的更改,因为你的任何一次更改都将会影响到很多业务组件或很多部件。

我从由低至高的层级关系进行解释:

基础层

可以这样定义基础层,这一层的组件拥有以下特点:

• 可以用于其他项目工程;

• 组件里的方法必须考虑周全;

• 不应该任何的业务逻辑;

在我的架构中,基础层现在包括了 网络库、工具库、语言国际化。关于网络库,采用的是离散式网络请求,接口对象化之后给业务调用提供灵活性,工具库包括对系统工具库的浅层封装、第三方平台SDK、第三方工具库;语言国际化库,放在最底层,是因为任何UI相关的都会涉及到语言国际化的问题。语言国际化库中,对外提供的方法是稳定,但是其中的国际化字符的key value是一直在增加的,因为外部调用是没发生变化的,所以这里的内部变化对上层的组件不会有大的影响。当然需要对语言国际化有很好很严谨的管理机制,不然会内部紊乱的。

定制层

顾名思义,定制层就是针对项目定制的组件层。准确地说是,项目基础定制层。

在我的架构中,定制层目前包括 项目环境配置库、****App****风格****UI****库。

项目环境配置库,主要用于:1、配置项目不同开发环境的请求地址;2、配置第三方平台AppKey;

App风格UI库,我认为一般稍成熟的App,UI那边都会有一套自己的UI风格。比如说:几种字体、几种颜色、几种按钮、几种标签、几种cell。是的,App风格UI库就可以封装这些东西,这个库的使用率越高,你的App风格就会越统一。

部件层

多业务会使用+ 相对固定的UI + 需要接口请求+ 不掺杂业务逻辑。是的,我们可以从这几个维度去定义一个部件组件。比如:上传图片组件、选择地域地址组件、支付组件、分享组件。

中间件

它的存在就是为了业务组件,它的作用:

1、解除所有业务组件之间可能存在的耦合;

2、将App生命周期事件分散到所有业务组件中处理;

业务层

这一层其实没什么好说的。在组件化思维中,这一层主要要考虑的是如何使用中间件,需要中间件做什么。在做一个业务组件初期一般需要考虑四个问题:

1、这个组件是否需要传参才能被创建;

2、这个组件是否需要告诉调用方某个值(比如说状态);

3、这个组件是否需要在发生什么事件或变化时,需要其他业务知晓的;

4、这个组件有几个入口;

这四个问题的解决都是要通过中间件来解决的。是的,中间件可以解决掉!

总结:开发者铭记三点

1 不可出现反向依赖,只能上层依赖下层,不可反之

2 所有上层组件都能对下层组件充分利用使用,达到最大化的代码复用!

3 脑中始终需要有组件分层架构图,明确自己所做组件属于哪一层

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容