我们在考虑数据接口的设计的时候,最容易关注的是数据本身的接口。简单点说,要哪些数据,我接口设计的时候就加入那些数据。在此基础上再考虑数据结构以及结构优化。
这些并没有什么问题。事实上,也只有考虑这些,接口才可以基本工作起来。不过,一个设计好的接口会比一般的接口多注意一些因素,一些以后可能发生变化的因素。在好的接口中,有些接口,一直不需要修改;有些接口修改了也和原有接口兼容。
一个接口一直都不需要修改,一般有两种情况:需求永远不变化;接口设计地太好了。我们几乎不敢说自己的接口设计地太好了,以致于可以肯定以后不会修改,于是我们不得不面对需求变更的问题。
对于软件A1和软件B1,他们之间定义了接口F1。当需求变化后,如A升级到A2,B软件升级到B2,接口也变成F2。如果我们只考虑软件A2和B2,那么当然没什么问题,F2完全可以运行。
随着软件的复杂度提高,各种运行环境我们也开始必须考虑到。对于本案例中,我们应该关注A1、B1、A2、B2可能同时存在的情况,那么我们必须考虑A1和B2以及A2和B1的情况。如果版本更多,其中间的复杂度越高。
在业务编写中,相对于高版本来兼容低版本的代码还是可以编写出来的,因为它已经知道低版本的存在了。可是低版本如何兼容高版本之间呢?更何况,就算高版本能够兼容低版本,也容易让人对这类接口变得头疼。
在《跨越边界: Rails 迁移》中,针对Rails中的Migration做了一些比较深入的探讨。其重要信息在于,Rails中在数据迁移的时候,做了Migration记录。这样,程序可以根据这个记录进行迁移数据。
请关注这个不同点,系统中,将这些差异记录下来了!把这个思想应用到我们的数据接口的设计中,你会忽然发现,我们遗漏一项重要的信息。我们以往在设计接口的时候,只考虑到了A和B之间的关系,却没有考虑在第三纬度上的关系,也就是旧接口与新接口之间的关系。
这真是本文重点要提到的,数据接口设计中,应该包含版本差异信息。
简单点说,对于接口F1和F2来说,假设F2是F1的升级版本,那么F2在设计的时候必须考虑如何和低版本的F1兼容。设计师必须将其中的差异写入进接口信息中。
一般情况下,我们的接口变更多为:增加新表、增加新字段(我这里简单地用表和字段来描述数据。针对不同的存储格式,有不同的叫法)。很少有删除字段和删除表的。修改字段类型的做法虽然存在,但更是少之又少。
针对上面的变更,其实都可以找到一种方式来描述这些差异。一旦我们定义好这些差异,不管旧版本的程序还是高版本的程序,都可以通过这些差异来获取到自己所需要的数据。就算F1和F2已经不兼容,我们在接口信息中将不兼容的信息写进去,程序一下子就能发现,而不会在接口操纵到一半的时候,发生不可以预测的错误。
好的接口设计必然也是规范的设计。将这种设计规范在公司内部统一起来,就可以在此基础之上,设计出统一的接口交换程序,这个程序能够自动处理接口差异,可以想象,系统的兼容性必然上一个台阶。
认真地考虑我们系统之间的兼容性,将会给以后的维护减少很多工作量。而既然考虑了兼容性,就必须在接口设计的初期以及变更的时候,将前后版本的差异信息加入。这才是一个完整的设计。
分享到:
相关推荐
### 用友U8_EAI数据接口常见问题详解 #### 1. CRM与U8接口,如何控制只从U8导入当前时间以后的数据? - **问题背景**:在实际业务场景中,通常需要确保从用友U8系统同步至CRM系统的数据是最新的,即只同步在特定...
例如,当更新API返回的数据结构时,可以使用JSON比对工具来确认新旧版本的差异,确保没有遗漏或错误的变化。 “jsondiff”这个文件名可能是指实现JSON差异计算的具体JavaScript库或模块,它可能包含了计算两个JSON...
在课程设计的总结阶段,我们需要回顾整个过程,提炼出学习到的关键知识点,如接口设计原则、汇编语言的实践应用、硬件与软件的协同工作,以及问题解决策略。同时,反思在设计和实施过程中可能存在的不足,提出改进...
在当前的企业环境中,标准领导企业占据着主导地位,它们不仅决定了行业的趋势,还决定着数据挖掘和数据处理的多种模型算法的发展方向。多企业模型算法已经成为了多元化企业标准编纂和数据处理分析应用开发系统中的...
- `List`是一种常用的数据结构,在Java中,`List`接口是`Collection`框架的一部分,它允许存储元素的有序集合。 - 常见的`List`实现包括`ArrayList`和`LinkedList`等。 - 基本操作包括:添加(`add`)、删除(`...
审计数据采集的特点包括选择性(选择特定数据进行采集)、目的性(根据审计目标确定采集内容)、可操作性(需确保采集方法可行)以及复杂性(由于数据多样性及系统环境差异,采集过程可能较为复杂)。 审计数据采集...
文档中可能还涉及到了接口或协议的设计,如“DGnumberISBNPublishPriceNumberDGDate”可能代表了某个接口协议中需要传递的数据。在软件工程中,定义清晰的接口对于系统各部分之间通信和交互非常重要。 7. 系统安全...
STM32中文参考手册_V10.pdf 是一份针对意法半导体(STMicroelectronics)STM32...通过结合数据手册和技术参考手册,开发者可以全面掌握STM32系列微控制器的全部潜能,从而在嵌入式系统设计中实现高效、可靠的解决方案。
在地理信息系统(GIS)与计算机辅助设计(CAD)两个领域的应用中,CAD数据往往用于创建精确的绘图和设计,而GIS则侧重于地理位置信息的管理和分析。两者在数据格式、属性信息和图斑注记信息上存在差异,要实现CAD...
CONEXANT强调此文档为初步信息,内容可能会发生变化,因此用户在设计和生产过程中应确保使用的是最新的数据手册版本。此外,他们不对文档中的错误或遗漏承担责任,并保留在不通知的情况下更改文档的权利。 重要的是...
3. 版本之间的差异:文档中讨论了gSOAP不同版本之间的差异,包括2.4及以前版本与2.5版本之间的差异,2.1及以前版本与2.2版本之间的差异,以及1.X版本与2.X版本之间的差异。这些信息对于那些需要维护或升级现有系统的...
这种设计方法存在的主要问题包括平面、立面、单机三视图及剖视图数据一致性难以保证,修改设计时容易出现遗漏,且难以提取精确参数,导致设计效率不高。 在烟草加工线布局设计中,涉及的设备众多,结构复杂,尤其是...
三星电子明确指出,虽然手册中的信息在发布时被认为是准确无误的,但不承担因可能的错误或遗漏导致的任何后果。三星有权随时对产品及其规格进行修改,以提升功能或设计,而无需事先通知用户更新文档。此外,购买者...
5. 接口设计:定义系统与其他系统或组件的接口,包括API规范、通信协议和数据交换格式。 6. 系统安全性设计:包括身份验证、授权、数据加密、防火墙规则等。 7. 性能与可扩展性设计:考虑系统性能指标(如响应时间、...
具体到操作层面,数据导入可以通过新建作业来完成,用户可以在ETL模板设计界面中增加扁平文件源接口,并通过双击接口图标来设置数据接口。在数据导入完成后,用户需要进行数据清洗转换,将非结构化或半结构化的数据...
5. **完整性检查**:复制完成后,软件通常会进行完整性检查,确保目标硬盘上的数据与源硬盘一致,无遗漏或错误。 除了基本的硬盘复制功能,【效率源强力复制软件】可能还提供其他高级特性,如: - **定时复制**:...
这份文件可能是关于NT35310芯片的早期设计规格文档,提供给开发者以理解如何使用这款芯片来驱动LCD屏,并指导相关的接口设计和集成工作。同时,文档中可能还会涵盖制造商NOVATEK对文档信息的声明,表示不对其内容的...
- **版本差异**:虽然未能完全按照英文第10版进行全面校对,但仅针对“文档版本历史”中指出的差异进行了更新,以确保与最新英文版本保持一致。 - **局限性与改进**:翻译过程中可能存在错误或遗漏,鼓励读者提供...
BMA150三轴数字加速度计芯片是一种由BOSCH Sensortec公司生产的高精度、小型化、...此外,生产过程中可能采用的OCR扫描技术可能造成个别文字识别错误或遗漏,生产者在解读数据手册内容时应当保持一定的理解性和通顺性。