针对node.js中的接口进行编程?

在C#和Java中,针对接口的dependency injection和编程是标准的。 我想知道这是否也可以在Node.js中实现? 例如,我编程一个内存caching模块,理想情况下,它应该暴露一个接口,让我们说两个方法getKey和putKey。 我可以有一个实现与ioredis和另一个只有普通的内存caching。 但是我的应用程序将只依赖于内存caching接口。

Javascript使用鸭键入

在用面向对象编程语言进行计算机编程时,duck typing是dynamictypes的一种风格,其中对象当前的一组方法和属性决定了有效的语义,而不是从特定类的inheritance或特定接口的实现。

从维基百科 – 鸭子打字

这意味着你可以使一个函数期望一个对象作为参数,并假定它有一些特定的函数或属性。 即:

function addAreas(s1, s2){ //We can't know for sure if s1 or s2 have a getArea() function before the code is executed return s1.getArea() + s2.getArea(); } 

要testing某个对象是否具有特定的function,我们可以执行以下操作:

 function isShape(obj){ return obj.implements("getArea") && obj.implements("getPerimeter"); } 

两者可以合并成以下内容:

 function addAreas(s1, s2){ if(isShape(s1) && isShape(s2)) return s1.getArea() + s2.getArea(); throw "s1 or s2 are not a shape!" } 

在这里你可以find关于这个主题的博客文章。

在你的例子中,你的两个实现都应该有一个getKey和putKey函数,并且期望一个具有这些函数的对象的代码必须在执行之前testing它们是否被实现。