在面向对象的编程语言中,一直强调面对接口或抽象类编程,而接口也一直是各大设计模式重点研究的对象,实际证明接口确实给程序设计和开发带来很大的灵活性。而接口这一概念源于编程,严格意义上说应该来自于面向对象的语言,因此一些设计模式的教材举例子的时候都用了面向对象的语言作为讲解的工具。但其实在数据库中也有类似接口的概念,尤其在面向对象的Oracle数据库中。
这里的接口只能说类似于面向对象语言的接口,因为在Oracle中不存在接口数据类型或多个实现了同一接口的类型。这种接口的具体实现形式,我想开发过Oracle函数或者过程的人员都能想到,那就是Oracle中函数(过程)定义与函数(过程)体分离的,函数(过程)的定义相当于对接口的定义,但具体的实现是通过函数(过程)体来实现。这里跟一般接口的使用方式是一样的,只不过在编程语言中看作是类型而已。不过Oracle的这种方式中不能存在多个实现了同一接口的函数(过程)体,因为实现的函数(过程)名称与定义的是一样的。
而这种函数(过程)定于与实现的应用,平时更多只是在包中开发,很少提升到接口这个层面。最近在看Oracle的用户管理中看到了这一应用的体现。在用户密码管理中,Oracle用到了叫profile的文件对密码进行管理,如果用默认的profile文件进行管理,不能对密码的强度,规范性等进行校验,就比如dotnet中对密码的校验方式。Oracle服务器就提供了一个复杂密码的校验函数,以一个定义好的函数verify_function作为校验函数,oracle自身也提供了这个函数的实现方式,好比dotnet中的策略模式的实现,都提供了默认的方式。但Oracle中默认的校验函数仍满足不了要求,这时候接口的作用就体现了。这种定义与实现分离的方式,让用户可以定于自己的校验函数,用户只需要关心自己的函数。至于调用,那是Oracle服务器的事了。类似于这种接口式的管理,增强了数据库管理的灵活性。
以上只是个人的理解,继续学习中。