ReactiveCocoa 利弊

2015-02-19 12:34:31 +08:00
 nagato
新公司项目全是Reactive去构建的,本人实在无法习惯。一个简单到可以直接用IBAction搞定的UIButton响应事件,Reactive要写三倍代码去搞定,TargetAction绑定那个UIButton,在响应里面创建一个RACCommand,完了还得在另外一个地方Subscribe。完全想不到用Reactive的点在哪。。。


而且Reactive代码写多了之后显得一团糟,各种signal的关系里不清,还造成block的过分使用导致各种Strong weak self 的过分使用很容易导致retain circles。

当然我也许接触Reactive还不够久,了解还不够深入。有没有对Reactive比较熟的来分析下利弊?
4029 次点击
所在节点    iDev
6 条回复
chmlai
2015-02-19 14:10:30 +08:00
首先, 在 Button 的绑定方式对项目的复杂度几乎没有影响. 如果你没有写足够多的代码, 确实很容易纠结这个上面.

"Reactive代码写多了之后显得一团糟", 这很可能是你还没学会 RAC(FRP);
假设业务的复杂度不变, 与 RAC 的声明式编程比各种 delegate, action-target, block-callback 混在一起,定义各种状态那才叫一团糟.

循环引用根本不是什么问题.

没什么办法, 多写点代码, 多看点资料, 多体会一下就好了.
Elethom
2015-02-19 15:49:02 +08:00
我能說用了 RAC 之後代碼可讀性提升了一個數量級麼⋯⋯

不明白為什麼要把代碼分開寫,需要響應一個 control event 只需要一行 subscribe 就夠了。
nagato
2015-02-19 17:22:28 +08:00
@Elethom
目前是这样的,
1. ViewModel里面先构建一个RACCommand,create RACSignal 什么的就不说了
2. 在UIView的子类里把某个UIButton进行绑定之前那个command,addTarget:action
3. 在需要相应UIButton事件的地方,subscribe ViewModel里的那个RACCommand

但是所有这些,其实一个IBAction就可以搞定了。领导给的解释是,为了保持Reactive的风格,请还是保持前者
chmlai
2015-02-19 20:50:22 +08:00
@nagato
业务逻辑一般写在 RACCommand 里的 Signal generation block里面;
你的第3步 subscribe 一般不大需要.
WeeTom
2015-03-03 16:38:18 +08:00
http://www.teehanlax.com/blog/model-view-viewmodel-for-ios/
看看作者怎么说。
一个UIButton 是很简单,但是当你的项目足够大,Controller里面会包含太多的业务逻辑代码,非常难以维护。。这点我也是深有体会~而且很乱。。
我在做新项目也是准备使用ReactiveCocoa的~
kepenj
2015-03-10 10:36:35 +08:00
ReactiveCocoa 个人觉得作为快速构建一个新的应用,同时具备vc瘦身和单元测试非常方便和极优。但是理解RAC和整体框架源码是要花费不少时间;同时如果项目规模较大后,所有逻辑和模块还是得自己写和维护。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/171754

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX