你为什么也应该写一个开源库?

原文: 你为什么也应该写一个开源库?

之前工作折腾了一年多SDK,到现在公司也是先做SDK再做App,所以从SDK的角度来说,我被人“坑”过,也坑过别人,在这块思考得挺多,简单说说我的一些看法。首先很多人看到这个问题的时候,肯定都会觉得,写库是牛人干的事情,我之前也不例外的这样认为,但是最近开始尝试写了几个简单的NPM包,我发现上面的逻辑很可能反了,可能是写库让他们变牛或者变更牛。当然,如果你是Android开发,你的库可能是AAR,如果iOS那应该是framework,下文提到的“库”就作为各种公共可供第三方复用的独立模块的代称。

0. 写库逼迫你解耦和抽象

我们在软件工程学习的过程中,就无数次的被强调软件模块的设计要高内聚低耦合,然而大多数情况这只是停留在说说的基础上,很多人的代码如果要抽离,是非常困难的,经常会有公共的工具库里面带有业务逻辑的情况,也就是这些代码无法直接拿出来做库供别人用的,即是说这份代码是高耦合的。
写业务逻辑的思路是,写一份代码来满足当前需求。写库的思路是,我要实现一个功能,它可以让某个业务需求的实现更简单,同时他具有通用性。通常情况我们是从业务代码里面提公用库,这个过程就是解耦和抽象的过程,目标就是让代码更通用,对外界依赖更少,职责更纯粹。这样的事做多了,我相信你自己的代码即使不抽成公共库,也能比以前耦合更低。
可以参考《重构 改善既有代码的设计》来学习如何提取和抽象公用的部分。

1. 单一职责

之前我一个同事问我,我们代码库里面为什么没有common这样的目录,他要用于放置一些公用的东西,确实,我在设计项目目录结构的过程中刻意的避免了防止common这样的目录,除了common,还有一些叫global、utils或者base这样的名字,我是非常反感的,因为非常多的东西容易被放进去,而且,他们只有一个共同特点,那就是他们是被共用的,仅此而已,但是这也算共同特点吗?一个更好的划分应该是根据功能,例如,这个类是处理日期的,那个类是处理金额的,另外一个类是处理格式校验的。如果你抽取一个库,我像你不会想写一个common的库吧,按功能给它命名,因为只有这样,才容易让别人知道你的库是干什么的,也才可能会被别人用到。如果不抽离出来,你的common目录会越来越common,common到非常难用。

3. 深入思考接口的设计

库的接口一旦提供,有其他人用了,你就不能随意变更,每次修改都应该考虑向前兼容。这就要求前期设计接口时就要充分思考,而不是随意的写一个。这里需要考虑的有接口名称,单个接口名称和多个接口名称是否能一致,例如,例如断然不要写一个signup接口和一个logout接口作为一对,用signIn/signUp/signOut会好很多,其次,参数个数也应该考虑,每个参数都是对外界的耦合,随意加参数只会让接口更难用,设计接口的过程中可以考虑一下,这样设计的接口文档好写吗?如果你的接口要用大段文字说明它的用法,那我相信它不会是一个优雅的接口。

2. 文档的编写

上面一段提到文档编写,一个库通常要包含几部分详细的说明,如何集成,如果配置和初始化,各个接口如何使用。就像我上面说的那样,在设计接口时候通过思考文档是否复杂来从侧面评估接口是否优雅,所以文档的编写其一是为了帮助别人使用,其二是对整个库设计从使用者角度的再一次审视。日常工作中可能会做类似的抽取公共库的事情,但是因为限于团队内部,经常会忽略很多细节依赖,而这些依赖正是让你的公共模块无法复用,难以使用的罪魁祸首。

4. 对修改的封闭

之前项目里偶有发生某人改了公共目录下的内容,导致其他地方出错,聊过的大部分项目都是通过定军规来做,xxx目录修改必须通过评审,我始终觉得,没有控制彻底和没控制区别不大,真要设置不让人随意修改,就应该分离出来,单独成模块。这个模块库的代码权限直接控制,这样100%保证不会被“实习生”修改。如果按上面的思路把公用的部分抽取出来,可以保证公共模块更加稳定,当然这也得益于抽取路过程中的解藕和抽象。

5. 自己写库让我们更懂得感恩

乍听起来这有点偏题,其实最主要想说的就是:“养儿方知父母恩”。我想如果你认真的去写了一个库,你能更深刻的理解写库的辛苦付出,可能你以后发现某些库文档不完善的时候,你会更宽容一些,看到作者因为经历不足停止维护时候你也会多一些理解。总之,在你只用别人写的库的时候,你一定不能体会到开源库作者们的辛苦付出的,写到这里,我真心的感谢他们的付出。

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

推荐阅读更多精彩内容