`

接口你准备好了么?

阅读更多

相信大家都听说过这个只有程序员才能听懂的笑话。一个女程序员说,下周就是我男朋友的生日了,他要来我这,他也是程序员,大家说我送给他什么礼物最好。网友的评论是:告诉他,接口已经准备好。

上面这个笑话却是听起来听funny的。这让我联想到,我们在实际的项目中,应该什么时候提供接口?

说道这里大家会想到的是什么?当然是代码抽象三元则了:DRY、YAGNI、Rule Of Three。简单的介绍下这三个。DRY, Don‘t Repeat Yourself,是面向对象设计原则中经常被用到的原则之一,他的意思很简明,不要重复自己,意指在开发过程将通用的功能提出来作为接口供别人调用,避免代码重复。这个听起来很有道理,想一下,一旦我更改了需求,有时候我仅需要更改底层的接口就好了。

YAGNI,You Aren't Gonna Need It,是敏捷开发中提倡的,叫做你不会需要他了,意指你自以为有用的功能,实际上都是用不到的。用于敏捷开发过程中,快速的完成功能。这里听起来他和DRY是一个死对头,一个提倡对象的抽象话,找到通用的接口,另外一个则倡导不要把精力放在抽象化上面,你只要完成你自己的就可以了。但是反观这两种理论都有自己的道理,于是出现了另外一个角色:Rule Of Three。

Rule Of Three,我称它为第三次原则,意指当这个功能第三次被用到的时候,你将有必要把他做成一个接口。理由是如果一个功能或者函数被用到了两次,那么没有必要花时间去抽象它,但是当这个接口第三次被调用的时候,你将考录该把这个接口抽象化了。

上面说了很对是否应该抽象话的问题,相信大家已经有些了解了。下面我说下我个人的意见。

做Code Review的时候,经常会听到这样的声音,我这样子(可能增加了复杂性)做是考虑到以后有人会用,所以提供了一个比较通用的接口。我们先分析一下这样的情景,以后会用到是什么时候?我清楚的记得,我为了通用性,曾把一个布尔类型硬是存成了字符串类型,可是结果是到现在也没有出现当时我考虑到的别人会用的情况。其次,一个功能可以有不止一个的解决方法,我们又如何确保我们提供的接口在被人用的时候,他会觉得用的很舒服。

说了这些,好像都是在只刮风不下雨,那我们到底该什么时候提供接口呢?我的回答是,最近一、两个迭代会用到的时候。比如我们在做一个前台的排序,用户可以改变某一类型的几个子模块的显示顺序。而这个功能在这次迭代中有用到,且不止一次,但是在不同的卡上。那我就完全有必要把它抽象程一个接口,方便调用。可以看到这个迭代中我们会用到它不止一次,那我完全有理由去做。而且更让人惊呆的是,我们的下一个迭代竟然又有两三个地方用到了排序,而且大家用这个接口很容易的实现了功能,毕竟我向大家提到过这个接口的使用,可以看出我抽象话它是正确的。

总之来说,抽象不抽象是看到底有没有具体的需求,一味的空想给人以空穴来风的感觉。到底有没有用谁也不知道,只是觉得可能有用。所以当你男朋友生日快到来的时候再准备接口吧。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics