`

接口你准备好了么?

阅读更多

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

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

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

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

分享到:
评论

相关推荐

    ERP前期工作Checklist:ERP实施,你准备好了吗?.doc

    ERP前期工作Checklist:ERP实施,你准备好了吗?

    主板常用接口介绍及定义

    串口是计算机主要的外部接口之一,通过九针串口连接的设备有很多,像串口鼠标、MODEM、手写板等等,九针串口的示意图如上,各脚的定义如下:DCD 载波检测、RXD 接收数据、TXD 发送数据、DTR 数据终端准备好、SG 信号...

    公用的CRM框架,相关接口都已经准备好,只要自定义/调用接口使用即可

    本压缩包提供了一个公用的CRM框架,它已经包含了必要的接口,允许开发者根据自身需求进行自定义和扩展。 【Java作为开发语言】 该CRM框架采用Java作为主要的开发语言。Java以其跨平台性、稳定性以及丰富的类库而广...

    c#面试大全在面试中如何脱颖而出?你做好准备了吗?先看看下面的面试大全吧

    在C#面试中脱颖而出,需要对这门语言有深入...通过不断学习和练习,你可以更好地应对面试,从而在众多求职者中脱颖而出。记得在面试前复习这些知识点,并准备一些实例来展示你的理解和应用能力。祝你在面试中取得成功!

    微机接口设计实验

    - 发送字符前等待8251发送准备好,然后将字符ASCII码加1后发送。 - 接收字符,检查接收准备好标志位,接收后显示在屏幕上。 - 实现自发自收的功能。 **2.4 实验结果** - 成功实现了串行通讯的自发自收功能,能够...

    微机接口古辉版答案

    《微机接口技术》是计算机科学与技术领域中一门重要的课程,主要研究计算机硬件系统与外部设备之间的通信和数据交换。...通过学习和练习,可以更好地掌握微机接口技术,为未来的计算机系统设计和维护打下坚实基础。

    支付宝单笔交易查询接口

    3. **发起请求**:将准备好的参数封装成JSON格式,通过HTTP请求发送到支付宝服务器。 4. **接收响应**:支付宝服务器验证请求后,返回交易详情数据,通常包括XML或JSON格式的结果。 5. **结果解析**:商户或开发者...

    串行接口SPI接口应用设计

    当数据传输完成时,SPI会产生一个中断请求,通知CPU数据已经准备好或者传输已经完成。这样可以避免使用轮询的方式检查SPI状态,从而减少CPU的负担。 #### 五、示例代码解析 下面是一段SPI主机模式下连续发送和接收...

    接口自动化测试方案jmeter+ant+jenkins.

    接口自动化测试方案jmeter+ant+jenkins 本文描述了一个基于jmeter、ant和jenkins的接口自动化测试方案,该方案旨在解决手工测试的低效率和不准确性问题。通过搭建自动化测试框架,测试人员可以快速、准确地测试接口...

    接口技术模拟试卷题集

    通过这份“接口技术模拟试卷题集”,我们可以对以上知识点进行深入学习和实践,以提高我们的接口技术水平,为即将到来的期末考试做好充分准备,确保顺利通过。通过反复练习和解答,我们将更好地掌握接口设计和使用的...

    微机系统与接口技术答案答案

    《微机系统与接口技术》这门课程主要探讨的是计算机硬件系统的核心组成部分——微处理器以及其与外部设备的连接方式,即接口技术。本课程涵盖了从微处理器的构成到计算机系统的整体架构,再到内存和外存的工作原理,...

    计算机接口技术答疑要点

    - 查询方式:CPU主动查询外设状态,等待外设准备好数据后进行通信。 - 中断方式:外设完成操作后向CPU发送中断请求,CPU响应后暂停当前任务处理中断服务程序。 - DMA(直接存储器访问)方式:外设直接与内存交换...

    佳的美 MMI接口定义图

    4. DTR(Data Terminal Ready):数据终端就绪,由数据终端设备(DTE,如电脑)发出,表明已准备好接收或发送数据。 5. DSR(Data Set Ready):数据集就绪,由数据电路终端设备(DCE,如调制解调器)发出,表明其已...

    PS2接口协议解析及应用

    当设备准备好接收数据时,会发出ACK信号;反之,如果设备未准备好,则发出NAK信号。 4. **速率设置**:默认情况下,PS2接口的数据传输速率为1.0Mbps,但可以通过特定命令进行调整,如降低至125kbps,以适应不同设备...

    诺诺开放平台请求开具发票接口(2.0)接口对接文档【外部用】

    2. **发票信息准备**:根据业务需求,外部系统需准备好开具发票所需的数据,如开票人信息、购买方信息、商品明细、税率等。这些信息需要按照诺诺平台规定的数据格式进行组织。 3. **请求发票开具**:使用PHP编写...

    支付宝接口对接流程

    本文将详细介绍一个餐饮系统与支付宝API接口对接的具体步骤及注意事项,帮助读者更好地理解和掌握这一过程。 #### 一、对接前准备 在正式开始对接之前,确保以下准备工作已经完成: 1. **拥有支付宝账户**:首先...

    支付宝java确认接口

    4. **HTTP请求**:使用Java的HTTP客户端库(如Apache HttpClient或OkHttp)发起POST请求,将准备好的参数和签名一起发送到支付宝服务器。 5. **处理响应**:收到支付宝服务器的响应后,解析响应内容,通常是JSON...

    网络物理接口V.24

    控制线包括RTS(请求发送)、CTS(清除发送)、DSR(数据设备准备好)、DTR(数据终端准备好)等,用于控制数据流动;定时线则负责同步传输速度。 - **200系列接口线**:针对并行通信设计,适用于DTE与并行自动...

    携程机票代理商API接口开发文档

    为了更好地支持业务需求并提供高效的服务体验,携程机票研发团队设计了一套完整的订单处理API接口。这套接口的主要目标是帮助供应商能够更便捷地查询和管理在携程平台上产生的订单信息。通过这些接口,供应商可以...

Global site tag (gtag.js) - Google Analytics