说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

前Twitter iOS技术团队负责人:使用第三方库的四大准则

HTML文档下载 WORD文档下载 PDF文档下载
直接使用第三方库能够最大程度缩短开发时长,开发者很难抵挡着近在眼前的“短期红利”,但“魔法神奇库”也有可能阻碍程序排错。本文作者Ben Sandofsky曾领导Twitter iOS应用技术团队,他给出了挑选库时的几条原则。

CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿、参与内容翻译工作,或寻求近匠报道,请发送邮件至tangxy#csdn.net(请把#改成@)。 


如果今天能拿到50美元或1年后拿到100美元?你肯定选择前者;但五年后拿到50美元或6年后拿到100美元,你肯定选择后者。这真是不可思议,因为两种选择的时间差仍旧是1年而已。经济学家将这种现象称为双曲贴现(Hyperbolic Discounting),指在面临两种相似选择的情况下,人们往往倾向于更简洁及时的结果,暂且将其称之为“短期红利”吧。

在iOS App上加载第三方库曾是颇费周折的一件事,我们不禁停下脚步扪心自问:这一切真的值吗?后来CocoaPods(OS X 和 iOS 应用开发的第三方库管理工具)将加载过程缩减到秒,开发者就更难抵抗这近在眼前的“短期红利”了。


“短期红利”最吸引人之处在于省时,比如你的App需要一个REST API封装器,那么你是愿意用“魔法神奇库”只花1个小时搞定,还是花1天自食其力呢?

如果是创建原型,那么推荐使用现成的库。我让学生在初始阶段这么做,一来不想让繁琐的细节打击了他们的积极性,二来不想他们错过上交作业的最后期限。

但要开发一个数年屹立不倒的App就不是“一小时 vs 一天”的差别了,而是“100小时 vs 101小时”。这“魔法神奇库”适用于简单一致的API;而Production API牵扯到商业逻辑、边缘情况(edge case)和技术债务(technical debt)等等。产生式系统(production system)并不是十全十美的,“魔法神奇库”也可能阻碍程序排错。

此文无关库或CocoaPods本身,而是给你提个醒(见文章:“due diligence”)。一个团队吃饱了撑的才会花数周来寻找测试员测试代码;转而Google第三方库,选择搜索页面上第一条那个有10,000行代码的,也聪明不到哪儿去。

要知道库的成本并不是一劳永逸的。举个例子,苹果公司一向不怎么待见Core Data的“lock”方法,那要运行时下流行的Core Data封装器的最新版本怎么办?——可以先升级库,但填补5,774行代码空缺谈何容易?升级rename方法就意味着损害App。如果直接运行旧的Core Data,“lock”方法的顾虑也就不复存在了。

CocoaPods能解决依赖图(dependency graph)的问题,但应对不了API混乱(API churn)。如果你直接无视pod版本还能在半年后返回到原点(见文章:“return to the project after six months”),那真是个奇迹了。

总而言之,尽量别太依赖第三方库,能免则免。而且所幸你也用不了那么多。Cocoa网站背景引人注目,但它实际上是个一应俱全的框架,以创新方式提供动画、网络、持久化等App所需元素。

挑选一个库时,我秉持这几条原则。无法获得百分之百赞同是肯定的,但想反驳我,最好准备充分的理由。

1. 高级API避免使用abstraction。

iOS工程师在设计框架时,充分考虑了开发者自由发挥的“度”的问题。UIKit团队本来可以将UITableView进一步抽象,但他们知道要达到60FPS的速度,开发者必须考虑cell循环的问题。

总的来说,苹果公司为C语言提供低层API,为Objective-C提供高层API。如果需要一个简单的照片选择器,用UIImagePickerController,麻烦一点用AVFoundation。苹果公司也会犯错,比如iOS Keychain,还有复杂繁琐的Address Book API。前者已用封装器解决,后者已通过苹果的新Contacts.framework解决。

管理过程中,时不时出现的键盘会拖慢进程。重新布置所有Input View,把它们放在显而易见的位置。如果单纯把问题丢给库来解决,一旦遇到View Controller限制,那么abstraction就会漏洞百出,跟筛子似的。想想automaticallyAdjustsScrollViewInsets失败了多少次啊,它在UIKit里就是View Controller属性。

2. 别太把Boilerplate当一回事儿。

设定Core Data栈需要的20行代码,就好比巫师施法没有祭品一样让人匪夷所思。你可以使用一个Core Data封装器1行代码的Setup,但我的做法是直接复制粘贴样板文件。没错,复制粘贴而已。

初学编码时,别人就告诫你:“切忌重复”。但往往开发者非得浪费几百个小时为干巴巴的代码排错后,才突然明白原来自己一直在“重复”。

如果样板文件让你觉得天旋地转了,就将它重构进类方法吧。这也嫌麻烦的话,就创建一些模型对象(model object)。总而言是目标是迭代为领域模型(domain model)。苹果的框架只负80%的责是有原因的,剩下的20%得靠你了——因为毕竟是你自己的App。

3. 多多不一定益善。

在《代码大全(Code Complete)》一书中,Steve McConnell解释道:project的成本跟代码库规模并非线性扩展的关系。所以做小一点的project比较明智,这不足为奇。

AFNetworking这可能是最受欢迎的开源iOS库了,具有请求序列化、可达性监测以及安全保障等诸多特点。今年四月,研究者却发现了两个严重的安全漏洞,涉及2.1及以上版本用户,两个版本之间时间跨度长达一年。大多数App并不需要使用AFNetwork,为了降低安全风险肯定也不会用到“证书锁定(Certificate pinning)”。

4. 如果问题超出了熟知领域,推荐使用库。

千万不要走极端,自己不了解的东西出了问题,也是要承担责任的。为OAuth排错?还是省点力气吧,库虽然并非完美的解决方案,但它是更好的选择。曾经有人说:“要是库能解决问题,干嘛还费劲搞明白OAuth?”

iOS 5 Beta推出后,我的团队发现了苹果系统中OAuth库的漏洞。多文件上传(Multipart-upload)有问题,照片上传往往失败。那时候iOS 5 API是锁住的,而苹果看样子也没有及时修复问题的意思。所幸我们能善加利用OAuth,最终将苹果框架“糊弄了过去”,解决了问题。

没必要专门去了解OAuth,但是如果你的App用到了OAuth,那么了解至关重要。没有人会在乎是代码出了问题还是库出了问题。关键是——这是你的App,你难辞其咎。

(翻译/张新慧 审校/唐小引)

文章来源:Medium

作者简介:

Ben Sandofsky,iOS应用开发者,现任CodePath创业公司顾问;曾任HBO(美国付费有线和卫星联播网)的硅谷题材剧集《Silicon Valley》的技术顾问;曾领导Twitter iOS应用(iPhone、iPad和Mac)技术团队。


预告:  2015中国移动开发者大会(MDCC 2015)将于10月15-16日在北京新云南皇冠假日酒店召开。大会特设五大技术专场:平台与技术iOS、平台与技术Android、产品与设计、游戏开发、企业移动化、虚拟现实专场。此外,大会更是首次举办国内极具权威影响力的IoT技术峰会,特设硬件开发技术与嵌入式开发两大专场。大会将聚集国内最具实力的产品技术团队,与开发者一道进行最前沿的探讨与交流。 

第一时间掌握最新移动开发相关信息和技术,请关注mobilehub公众微信号(ID: mobilehub)。


Java EE 8愿望清单:缺少这些,Java EE将不会完美 Surface Watch?传微软正测试搭载Win 8的智能手表 又一美国造?联想在美设厂制造产品 软件定义未来 2013 SDCC中国软件开发者大会全面开启 可以直接拿来用的15个jQuery代码片段 程序员最害怕的5件事 你中招了吗? 机器智商已达四岁:亲,是时候考虑你的饭碗了 读60行代码完成的NoSQL数据库,看数据库打造面临的挑战 聚焦全球移动市场:韩国,开放之后是春天? Github 终于开始认真考虑开源项目许可证了 雅虎发布今年第二季度财报 总营收为11.35亿美元 既然无法避免被GAE锁定,何不考虑其中的机遇并自力更生 19亿美金背后的分析:91为什么要卖?百度为什么要买? 直接拿来用!最火的iOS开源项目(三) 让代码飞一会儿,超级有用的CSS编码工具集 创业者如何在Demo演讲上打动投资人? 微软小打小闹的移动版Outlook Web App,会不会被用户抛弃? 哪门编程语言影响力最大? 微软启动“Companion Web”计划 可互连多屏幕设备 让你望而却步的密码管理服务已获得100万美元的种子基金 SDCC 2013开始公开征集讲师和演讲主题 不用图片和JS,照样创建绚丽的动态CSS3菜单 是福还是祸?开发者饱经风雨的内心独白 设计师/开发者看过来,七月35款新工具速递! Hadoop进军机器学习:Cloudera收购Myrrix共创“Big Learning” 张民杰:三人团队的OpenStack机会 White Elephant:开发者必备的Hadoop利器 不及分析师预期:微软第四季财报揭晓 净利49.7亿美元 Facebook收购英国手机代码验证公司Monoidics Apache基金会废弃其C++标准库 鲍尔默宣称微软有一百万台服务器,这个数字真的靠谱吗? !!!请问我写的多线程CSocket连续接受用户请求的程序为什么不对?在线等。。/。 关于 New Collection 类型数组和列表框的问题(急!) 安装的中文版vs.net,调试c#程序时,提示不能调用类库,为什么? mstcpip.h哪儿有? 菜鸟的问题,请帮忙 .c and .cpp 一个关于mfc兼容性的问题? 翻译高手请进...... 求教:关于mp3算法的问题 这里的狗屁文章很多,不过看得让我笑个不停 RichTextBox右对齐怎么做? 关于大数据的问题? 关于CStringArray的使用问题???? lpd好麻烦!!! 关于Dependency的问题 有谁做过排课系统吗?具体的算法。。 我能单步跟踪么? 有没有高手指点一下,游戏需要OpenGL,怎么办? 请帮帮我!我用query+Updatesql更新时出现问题 一个全新的关于.net技术的网站--XML中华网(www.xmlchina.net)! 想让JLabel显示的字是从上到下的。该怎么办? 关于相同记录不能存在的问题 ?消息响应问题 好难的问题!!! 菜鸟有道数组问题请教!!!!!!help,help 关于CStringArray的使用问题???? !!!请问如何通过VB控制来将word文档中的1个图片替换为另1个图片!!!!! 好东东 !!!请问如何通过VB控制来将word文档中的1个图片替换为另1个图片!!!!! 请教高手,给高分!!!!!! 难呀,很多高手都说难!!!! 屏蔽右键??如何做。。。。。 有简单的访问StoredProcedure的方法吗? 简单问题:redhat linux7.2 支持中文输入吗? 谁有ASP上载组件的源代码下载 !!!请问如何通过VB控制来将word文档中的1个图片替换为另1个图片!!!!! Label控件拖放时,拖放结束(放开鼠标)触发哪个事件?急... 技术问题中的非技术问题》》》》》 请大侠看看这个怎么实现比较好!读取文件的一部分。。。 如何把c++builder开发的程序移植到 windows ce环境下???共有6870分送!!! 如何显示JPG文件? 再问审批流程中的多角色定义 屏蔽IE工具栏等的高难度问题?????路过的高手都都看看吧;-) 急问:在VC中怎样些中断服务程序? 关于时间字段的问题 怎样用ATL制作一个Dialog容器,里面可以放置别的窗口 请问VC中为什么需要动态创建(与序列化有关的)?求通俗的解释或举例说明。谢。 紧急求助!! 请问那里有tc++ 3.0的下载?小弟先行谢过啦! 怎样从句柄得到对象,附有具体代码? 关于CStringArray的使用问题???? 我的程序错了么?? 求懂越南语的 英语翻译A:你去自习吗?B:是的,我去自习A:我也是B:我们一起吧A:B:有,我有A:借我一支,B:好的B:不用客气 一氧化碳是酸性氧化物吗,酸性氧化物都有哪些常见的 乙酸铜属于什么电解质 如果你懂越南语就帮帮我吧··Anh biet rang chi co tinh yeu anh danh cho em thoi van chua du?Nhung em Anh chi co tinh yeu ma suat phat tu trai tim ma thoi.Em co hieu khong day?Anh biet vi em con bo me,con tuong lai phia truoc,anh khong trac 春秋战国时期的成语故事最好是多一点的成语故事,要春秋战国时期的 冰醋酸是不是电解质 有人懂越南语吗,快来帮下忙Họ Tên:Trường bạn đang theo học:Địa chỉ của trường:Địa chỉ của bạn:E-Mail của bạn:Năm Sinh & MN 会越南语的进来帮个忙QAQ想知道这个图里的越南语是个什么意思= http://hiphotos.baidu.com/%DD%FE%E4%D8%C0%BD/pic/item/c383c342400aa5516b63e5df.jpg 英语翻译E muon ve nhung khach kg muon e ve. 现有碳酸钙,水,碳酸钙溶液,该如何制取氢氧化钠?写出有关化学式即可, 写四个春秋战国时期的成语典故____ ____ ____ ____ 请大大帮小弟看看这越南语 em ve nha roi va moi tam xong em bay gio ngu nha em hom nay xin roi .xin loi anh .em muon gap anh va om anh .anh da ngu chua em mong anh dung quen em chuc a ngu ngon em nho anh nhieu hon anh 中国传统社会的农耕经济有哪些特点论述题 英语翻译toi qua khong gui tin cho duoc than long xin loi nhe a thay bao la dung may thnh trung quoc de dinh ra chu viet phai ko vay hay qua thoi moi nguoi van khoe chu 纯净的冰醋酸导电么? 自农耕经济有何特点? 苯能使溴水褪色吗 英语翻译 我国原始农耕社会有哪些基本特征? 怎么用硅酸钠粉末配成水玻璃? 英语翻译Thong tin tu ban be:Cong ty co phan VINASHIN chuyen ve hang hai dang tuyen mot doi ngu kien truc su,ke ca vua moi ra truong,luong tu 1,5t den 7tr ( tuy theo nang luc ).La cong ty nha nuoc voi rat nhieu cong trinh lon,anh em kien truc su n 能否用水鉴别CAO和NAOH, 有关春秋战国的成语故事 英语翻译每天早晨都会想起你,只要你在身边就会觉得很幸福。随着时间的流逝,我害怕哭泣。对于逐渐改变的人心。明明知道若无所求就不会有所失的,但却无法无所求啊。无论等在前面 CaCO3、CaO可否与水反应我们测验时有一道题是说要辨别CaCO3和CaO的,请问可以让这两种药品放进水中静止,观察其反应来辨别吗? 这句越南语是啥意思good bye I xin dung ban tam 在KCl和CaCl2所组成的某混合物中,钾离子与钙离子的物质的量之比为2/1.则含1mol氯离子的该混合物的质量是 传说中 植五谷 尝百草 制历时 兴贸易 开创了我国原始农业文明的始祖是 越南语uh.dc thoj ok?sao laj bt tieng vjec ha.ok.bt tieng vjec nhan tjm nha ok. 求最后一空,要详细解答过程在KCl和CaCl2所组成的某混合物中,K离子和Ca离子的物质的量之比为2:1,则该混合物中含CaCl2的质量分数为 ,KCl与CaCl2的物质的量之比为 ,含1molCl离子的该混合物的 中国古代传说中,农业始祖——神农的儿子叫什么?神农的儿子是叫临魁,还是别的什么?直接复制网络资料的不给分也不采纳.请回答者认真审题. 请问这句越南语是什么意思?song khong phai la de keo dai nhung ngay chua chet 在KCL和CaCl2的混合物中,K*和Ca*物质的量比为2:1,含1molCl*的该混合物的质量是多少克? 中国古代的农业文明主要有哪些部门组成?各自的地位? 苯能不能使溴水褪色 为什么 在KCL和CACL2所组成的某混合物中,K+与CA2+的物质的量之比为2:1,则该混合物中含CACL2的质量分数为?KCL与CACL2的物质的量之比为?含1MOL CL-的该混合物的质量为多少G?请把以下的也解答,也是同一条题 中国古代农业文明的基本特征急用谢谢 氢氧化钠滴定醋酸更准确用氢氧化钠滴定醋酸,醋酸的量是越多越好还是越少越好? 中国古代经济发展(农业 手工也 商业 怎样可以把沾在玻璃上的玻璃胶除掉不会把玻璃弄花就行了最好是用简单的方法不要买什么酒精等一些经常可以用得到 氢氧化钠滴定醋酸恰中和是显碱性,那是先达到恰中和还是先达到恰中性? 向冰醋酸里加水,其导电图像怎样?但开始时,由于加水不足以使冰醋酸完全溶解,在开始的一段时间里,冰醋酸以一直是饱和溶液,是不是导电性不变呀? 玻璃胶能沾塑料吗? 酸性氧化物是指? 乙酸中加入NA2CO3后导电能力如何 中性玻璃胶与酸性玻璃胶有什么分别 氢氧化钠滴定乙酸浓度测量方法具体的操作方法,请不吝赐教.学会后追加分数. 越南语··谁懂··Em a,mot ngay nao do em se hieu duoc tinh yeu anh danh cho em.Du 2 chung ta o 2 dat nuoc khac nhau.Ngon ngu khac nhau,nhung dieu do khong bao gio lam anh lui buoc voi tinh yeu ma anh da danh cho em.co the em se lay chong nhung 有氯化钠,AlCl3,氯化钙三种物质的量相等,分别与足量的AgNO3反应,则生成沉淀的的物质的量之比是若生成沉淀的质量相等,则三种溶液的物质的量之比是? 为什么氢氧化钠滴定醋酸结果以总酸度表示? 冰醋酸加水,为什么一开始是导电能力增强.也就是说,为什么一开始是氢离子浓度增大?与没有溶解的冰醋酸有关么?冰醋酸加水变溶液导电性增强,这我也知道。可是,我想知道的是,当冰醋 有谁会翻译越南语啊?帮个忙!急求!@Công ty TNHH Kỹ thuật Công Nghệ Nam Sơn51-53 Phổ Quang, P.2, Q. Tân Bình - Điện thoại: (08) 3997.4421, Fax: (08) 3997.4423 - Hotline: 09089618 水银遇热会有什么反应 谁懂越南语?Và đã hết 1 tháng hè thiên đường ăn chơi,bây giờ mình vào lớp 1 cảm ơn hôm qua là 1 ngày đặc biệt đối với mình và m 水玻璃的主要技术性质和主要用途有那些分析题 急用 水银遇什么会变黑呀 乙酸和甲苯混合后会导电吗? 会越南语的进来帮个忙...有人知道这个名字怎么翻译吗?Duyên Thanh Tống.全名是Tống Thị Thanh Duyên,又该怎么翻译呢?感激不尽T-T 水银遇空气发生什么反应
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘