设计人员如何进行接口设计的

接口是提供给其他模块或者系统使用的一种约定或者规范。因此接口必须要保证足够的稳定性和易用性。这是设计接口的基本要求。

1.稳定性

接口必须相对稳定,否则将导致接口的使用者和提供者为了适应新接口而不断修改接口

的实现,可能重复进行无用功,严重时影响整个软件开发进度。那么如何保证设计的接口相

对稳定呢?

 首先,接口的语义必须明确。包括接口调用方法、接口名称、参数的类型和名称。抽象的接口名称或者参数名称使人困惑或者理解错误。如下例:

    History::SetAttribute

    设置历史记录的属性,初看不知道该接口要做什么。除非History的属性很多否则没有必要设计这样的接口。

其次,采用版本定义来区分接口的差异。比如提供接口版本查询功能

2.易用性

接口是提供给第三方使用的,较难用的接口会导致接口使用者的抱怨。

如:

  SetCookie(void* handle, const CookieParam& param);

  GetCookie(void* handle, CookieParam& param);

此接口名称的意义还是比较明确的,但是参数CookieParam过于抽象,将导致接口的调用者在使用接口时,需要将基本数据类型的值组成一个CookieParam类型,然后才能调用接口。

这是一种糟糕的接口设计。既不便于使用又不便于编译器优化。

如果该为下面的接口则较容易使用

        SetCookie(void* handle, const URL& url, const String& cookie);

        GetCookie(void* handle, const URL& url, String cookie);

除非接口的参数个数超过5个,否则最好采用基本数据类型作为参数。超过5个参数的函数一方面给调用者带来困难,参数排列组合的情况过多,另一方面就是不利于编译器优化时采用寄存器传递参数。

3.如何设计接口?

采用OOD思想,即面向对象的思想,提供类接口或者COM接口。

对于C函数接口如何设计呢?其实和C++接口设计原则一样,也采用面向对象的思想,只是将类设计成结构,公共的成员函数变为全局的函数,私有的成员函数变为static函数即可。函数接口的第一参数就相当于C++中的this指针即可。

4.接口设计的其他要求

* 规范性:主要是接口设计的代码规范,这是最基本的要求。同时考虑C接口命名污染的问题。一般C接口都会在接口前加上公司或者模块的标识。

* 可移植性:对于需要在多平台实现的接口需要考虑接口本身的可移植性,因此最少使用对于系统依赖的类型作为接口的参数类型或者返回值类型。

* 健壮性:接口需要有适度的健壮性,主要是指能够在多种情况下接口都能实现统一的效果,不会随着调用者传入的参数的变化而导致接口的输出出现违背接口语义的情况出现。

* 安全性:接口定义时需要严格限制参数的读写权限,如果只能是只读的参数一定要设置成const,以免出现非法使用。

* 兼容性:这是接口扩充的原则,必须保证同一个接口实现后向兼容前一版本的使用。扩充的同类接口也能兼容老接口的实现。

在接口和系统信息交互的过程中,两种模式使用得很普遍:同步调用和异步调用,同步调用要求接口发出请求消息后必须等待服务端系统的应答消息,接口阻塞直至 超时;异步调用则发出请求消息后,接口可以从事其它处理,定时轮询服务端应答消息和消息或事件通知。同步方式简单,但是很容易造成接口阻塞,造成消息积压 超时。


评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。