相信大家都听说过这个只有程序员才能听懂的笑话。一个女程序员说,下周就是我男朋友的生日了,他要来我这,他也是程序员,大家说我送给他什么礼物最好。网友的评论是:告诉他,接口已经准备好。
上面这个笑话却是听起来听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的时候,经常会听到这样的声音,我这样子(可能增加了复杂性)做是考虑到以后有人会用,所以提供了一个比较通用的接口。我们先分析一下这样的情景,以后会用到是什么时候?我清楚的记得,我为了通用性,曾把一个布尔类型硬是存成了字符串类型,可是结果是到现在也没有出现当时我考虑到的别人会用的情况。其次,一个功能可以有不止一个的解决方法,我们又如何确保我们提供的接口在被人用的时候,他会觉得用的很舒服。
说了这些,好像都是在只刮风不下雨,那我们到底该什么时候提供接口呢?我的回答是,最近一、两个迭代会用到的时候。比如我们在做一个前台的排序,用户可以改变某一类型的几个子模块的显示顺序。而这个功能在这次迭代中有用到,且不止一次,但是在不同的卡上。那我就完全有必要把它抽象程一个接口,方便调用。可以看到这个迭代中我们会用到它不止一次,那我完全有理由去做。而且更让人惊呆的是,我们的下一个迭代竟然又有两三个地方用到了排序,而且大家用这个接口很容易的实现了功能,毕竟我向大家提到过这个接口的使用,可以看出我抽象话它是正确的。
总之来说,抽象不抽象是看到底有没有具体的需求,一味的空想给人以空穴来风的感觉。到底有没有用谁也不知道,只是觉得可能有用。所以当你男朋友生日快到来的时候再准备接口吧。
相关推荐
CRM框架,干净整洁版本,可以自定义新增功能,或者使用现有的接口;以此为底层框架,开始自己的项目开发。
微机系统与接口技术课后答案``````````````ASASASASAS
很好的Java面试题第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
数据终端准备好(DTR) 信号地线(SG) 数据准备好(DSR) 请求发送(RTS) 清除发送(CTS) 振铃指示(RI) 3.实物图: 以下是我购买XX公司的一个usb转串口线:这个头就是一个公头,另一端是一个usb口 笨小孩串口工具...
Jmeter实现WebSocket接口的所必须的插件包 ...2、jetty-io-9.1.2.v20140210.jar 3、jetty-util-9.1.2.v20140210.jar 4、websocket-api-9.1.1.v...我们准备好这些jar包后,将它们拷贝到Jmeter目录的\lib\ext\目录下。
MDB-RS232专业版测试工具,可以通过威佛MDB-...当然下载测试工具之前需要已经准备好相应的硬件设备包括MDB-RS232适配器,以及相应的MDB接口设备或者威佛提供的相应的MDB设备模拟器。 软件为exe文件,直接运行即可。
相信对大家在电脑硬件的利用与维修方面有所帮助(至少像鼠标、键盘的转接口之类的东西可以自己搞定了) 九针串口Serial (PC 9)1CD载波检测2RXD接收数据3TXD发送数据4DTR数据终端准备好5GND地6DSR设备准备好7RTS发送...
1 准备工作 1.1 测试工具 (1)硬件: A182 型 Hi3516DV300 开发板一套、板卡适配 Sensor、板卡适配屏幕 (2)软件:串口工具(eg: SecureCRT) (3)其他: Micro_USB 线(可通信)、 HDMI 线、网线、 TF 卡、 U...
4 数据终端准备好 DTR(Data Terminal Ready) 5 信号地 SG(Signal Ground) 6 数据准备好 DSR(Data Set Ready) 7 请求发送 RTS(Request To Send) 8 清除发送 CTS(Clear To Send) 9 振铃提示 RI(Ring ...
一、教学环境准备 1、Postman: 接口测试工具、接口自动化工具 需要注册 右上角 Sign in 进行登录 点击 Create Account 注册 填入邮箱或用户名、密码 需要注册,否则有一些功能限制,比如工作区无法使用 2、...
第4字节为0(无室内机连接),则表示网关未准备好0x50-向下查询空调状态空调状态主动反馈查询网关所连接的某台或多台空调在线状态表7空调状态上传功能功能码控制值
因而教学内容的更新与教学条件、教学效果之间出现了一定的矛盾,如何在新形势下使计算机专业学生突出硬件特色,在掌握微机接口的基础知识和基本原理的基础上更好地了解微机的新技术和发展动态,培养理论联系实际、...
6 数据准备好(DSR) 20 数据终端准备好比(DTR) 7 信号地线路 (SG) 21 未用 8 载波检测 (DCD) 22 振铃指示精神 (RI) 9 发送返回(+) 23-24 未用 10 未用 25 接收返回(一) 9针串行口的针脚功能: ...
前置条件:该Action涉及的Entity及EntityName.hbm.xml已经准备好。 步骤: a. 前端页面触发Action的请求; 统一采用全路径请求,URL格式: 1> basePath/web/moduleName/*_ *.action {1} EntityName,{2} ...
为从机器到机器给板适当排序,将用到“板就绪”和“机器准备好”信号线, “板通过/失效”信号线是可选项。 (3)内部机器连接 如图1就表1所示。 图1 电气接口示意图 ①连接器:机器上的所有接口连接...
这个 Arduino 库是为了简化使用 Arduino IDE 将用于...我建议你用tinymlgen它来完成这一步:它会将你的 TensorFlow Lite 模型导出到一个 C 数组,准备好被这个库加载。 更多详情、使用方法,请下载后阅读README.md文件
后期准备把代码中会所有测试数据都整合到excel或者xml 内,Data文件夹就是这个用处 3、PO:所有Page。以Base页面为基础(看下图分析,来理解PO) 4、Public:一些公共的方法,比如测试报告脚本,封装好的 5、Result...
前两天写了关于组件库 iView Weapp的教程,其实也就是把文档上的例子拿出来体验了一遍,今天写一个具体的例子,调用一个免费的天气接口的api,并且把所获取...写一个request请求,把准备好的天气接口放在url里面,当请
很好的学习微机原理的课件,比较适合本科正在学微机原理的学生,以及为考研作准备
准备好这些jar包后,将它们拷贝到Jmeter目录的\lib\ext\目录下,启动jmeter。使用jmeter工具测试websocket接口,需要用到的相关jar包