iOS框架研究

面向协议的编程:

https://realm.io/cn/news/appbuilders-natasha-muraschev-practical-protocol-oriented-programming/

思考:大型工程,大型公司的结构和框架是咋样的,现实生活中的例子有没有?中共是如何组织协调事务的。各个部门的职责是什么,应该做什么,不应该做什么。部门之间时怎样协调工作的?  我们平常签署的协议有什么好处和坏处。

原则:用清晰的框架架构,和明了的表达使得程序APP具有可读性,可维护性,以及可扩展性。

问题:结构清晰吗

(1)多人可以协同工作嘛。

(2)可插拔,可替换吗?易于修改,维护吗?

(3)可读性强吗

(4)易于写测试代码吗

方法:

(1)少用继承,多用协议(面向接口编程)和category。想想我们日常生活中与人打交道,特别是陌生人,如果有一份协议,就可以免除许多的误会。eg,租房卖房协议,这样彼此就清楚了自己和对方的责任和义务。如果有个麻烦,找协议就可以了。因为这是双方协定好的。

(2)流水线作业,每个类,方法只做一件小小的,独立的事情。专业的人做专业的事情,不要越权,管闲事。如果需要调度,找更高级的领导。 就像富士康的工人。

(3)分层次,就像http协议一样。

(4)各个模块不能直接交流通信,如果需要通信,必须找指挥官。

(5)设计模式在这里可以发挥作用吗。a,业务模块和与之关联的非业务模块,建议使用适配器模型。

需要考虑的事情:业务,模块之间使用协议,接口通信。

业务逻辑,非业务的事项。各个模块提供给其它模块的,必须是以接口的形式。


问题:模块可复用吗?

           模块方便测试吗?

          各个模块的职责是什么?模块之间是怎样传递消息的?


MVC框架:

(1)各个模块:各个模块的角色,模块之间交流的方式。

模块定义了两个协议。一个是模块接口,它定义了模块可以做什么;另一个则是模块的代理,用来描述该模块做了什么

特点:View模块和Model模块无法直接沟通,需要通过ViewController间接的沟通交流。

a,Model Layer:代表了专业知识。

Model objects encapsulate the data specific to an application and define the logic and computation that manipulate and process that data

User actions in the view layer that create or modify data are communicated through a controller object and result in the creation or updating of a model object. When a model object changes (for example, new data is received over a network connection), it notifies a controller object, which updates the appropriate view objects.

b,View Layer:代表了视图。

A view object is an object in an application that users can see. A view object knows how to draw itself and can respond to user actions.

Communication: View objects learn about changes in model data through the application’s controller objects and communicate user-initiated changes—for example, text entered in a text field—through controller objects to an application’s model objects.

c,ViewController Layer:协调器

A controller object acts as an intermediary between one or more of an application’s view objects and one or more of its model objects.

MVC模式的缺点:好多事情都在ViewController中做了,当项目越来越大时候,VC里面太混乱了。

而对于View Layer,它显示需要的数据似乎也和专业知识不太相关。


MVVM模式:https://www.raywenderlich.com/74106/mvvm-tutorial-with-reactivecocoa-part-1

MVVM示意图
MVVM示意图2

相对于MVC而言,当代码越来越庞杂情况下,ViewController可能太臃肿了。把影响VIew Layer的表示逻辑从 Controller 移出放到一个新的对象里,即 View Model。View Model Layer仅仅存放了影响View Layer的视图逻辑,例如把一个NSdate转换为@“YY MM RR :SS”格式的数据。

MVVM模式缺点:数据绑定的使用使得Bug很难调试。因为数据绑定会使得一个位置的bug很快的传递到别的地方,要准确的找到错误源就不是那么容易的事情。

VIPER模式:我理解的是MVVM模式的加强版,更加细化责任。让不同的,专业的类负责处理具体的事物。https://blog.coding.net/blog/ios-architecture-patterns

View Layer:视图,负责展示view,和接受外部输入,eg:点击,触摸等。

(ViewController指挥官,负责调度)

Interactor:接受View中的事件,在其中处理好所有与业务相关的事务,抽象好数据,并将向Entity发出事务处理请求(注意,这时已经脱离了具体的业务相关事务)。

Entity:在此层处理脱离了业务相关的事务,eg,数据库的操作,网络的请求。

Presenter:包括ViewModel,负责提供给View的数据,这些数据必须View可直接使用。

Routes:负责跳转,JLRoutes。

单例模式:https://duckrowing.com/2010/05/21/using-the-singleton-pattern-in-objective-c/

当有人copy单例时候,如何保障单例是唯一的?调用-(id)alloc方法底层会调用+(id)allocWithZone:(NSZone*)zone,在里面保证唯一的。

在-(id)copyWithZone:(NSZone*)zone{  return self;}


一步步构建iOS路由




RunTime:刨根问底runtime

NSObject对象

这个类对象必须是一个 Meta Class 的实例,而这个 Meta Class 同时也是一个根 MetaClass 的实例。

BeeHive框架:模仿spring框架

REACTIVECOCOA研究

(1)子模块的structure,BeeHive

(2)列表模块的数据获取,数据处理,显示等。

         a,网络请求

         b,缓存

(3)不同VC之间的跳转

(4)与网页的交互的structure。

业务逻辑

视图逻辑

iOS控制反转(IoC)与依赖注入(DI)的实现

OBJECTIVE消息转发机制在框架设计中的应用:

深入理解Objective-C消息转发机制

+ (BOOL)resolveClassMethod:(SEL)sel

- (id)forwardingTargetForSelector:(SEL)aSelector

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;

- (void)forwardInvocation:(NSInvocation *)anInvocation

可以利用IOS的消息转发机制,发出虚假的消息(例如,调用不存在的方法),使用转发机制,拦截自定义的消息,发送给代理proxy,集中处理。


http://studentdeng.github.io/blog/2014/08/29/ios-architecture/

MVVM模式学习

https://github.com/lovemo/MVVMFramework

http://www.cocoachina.com/ios/20160301/15425.html

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

推荐阅读更多精彩内容