`

接口你准备好了么?

阅读更多

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

上面这个笑话却是听起来听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与并行自动...

Global site tag (gtag.js) - Google Analytics