对接口的依赖注入和编程是C#和Java的标准。我想知道这可以在Node.js中实现吗?例如,我正在编程一个内存缓存模块,理想情况下它应该暴露一个接口,让我们说两个方法getKey和putKey。我可以使用ioredis实现一个实现,使用普通内存缓存实现另一个实现。但我的应用程序只依赖于内存缓存接口。
答案 0 :(得分:1)
Javascript使用Duck Typing
在使用面向对象编程语言的计算机编程中, 鸭子打字是一种动态打字的风格,其中一个对象是当前的 一组方法和属性确定了有效的语义 而不是从特定类或实现的继承 具体的界面。
这意味着你可以让一个函数期望一个对象作为一个参数,并假设它有一些特定的函数或属性。即:
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();
}
要测试对象是否具有特定功能,我们可以执行以下操作:
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!"
}
Here你可以找到关于这个主题的精彩博文。
在您的示例中,您的实现都应该具有getKey和putKey函数,并且期望具有这些函数的对象的代码必须在执行之前测试它们是否已实现。