Interface我们就将之想像成是一种标准化的规范,在产品还没开发出来之前,我们心中想必已经有个蓝图,嗯…,这个功能需要什么样的功能,这时候就可以来制定界面,以「设计」为出发点而后再进入「实作」,如此一来我们在设计阶段就能发现一些盲点,减少经过实作过程才发现的窘境,节省繁复修改的成本,而且界面定义出来后,对于后续的分工开发就会有极大的帮助,合约之间只要照着界面完成开发最终再拼装起来,就会是一份快速又完整的智能合约。

来看看什么是界面

以「车」为例子,车的种类有分成卡车、轿车、救护车…,但都有一个共同点就是可以驾驶移动,而这个共同点我们就可以订定一个标准的界面,车只是一个概念,能够驱动,因此我们只要确保每一种车都能够驱动即可,至于要造出什么样的车就是各自实作啰,以下的例子就是一个简单的界面范例,我们先定义车能够进行驱动的简单界面:

界面的填充实作

定义好界面之后,就是进入实作阶段了,我们只要满足「drive」这个方法即可,至于合约内部如何达成的,这不会是界面的职责,以底下的例子来说,我们会实作一台卡车,这台卡车与车本身都具有「驱动」的方法,只要能动,不管什么类型的车,都是源于「车」。

规则

Interface的使用方式也有一些规范如下:

仅能被Interface继承不能被contract继承。 所有的方法在界面中仅能将可视范围提高到external。 不能有建构子(constructor)。 不能有状态变数(state variables)。 不能有功能修饰函数(modifiers)。

界面的继承

界面的继承其实相似于合约的继承,关于合约的继承,如有兴趣了解的朋友请参考「【开发智能合约—Solidity系列】— 何谓继承(Inheritance)」,好吧!接着进入正题,界面的继承范本如下,:

结语

界面在软件开发的世界里常常被使用到,为什么主要是如果我们能够在接收到需求进行设计时,就先定义共同会使用到哪些细节,对于未来实作时,能够约束功能范围之外,也减少反覆修改造成额外的开发成本,有了界面之后,我们对于产品会有更概观的样貌图,也会加速需求的收敛,非常值得学习的一套技巧。