【问题标题】:Interfaces for injectable services in AngularJSAngularJS 中可注入服务的接口
【发布时间】:2016-07-28 22:39:29
【问题描述】:

我是 AngularJS 的新手。据我了解,依赖注入的全部意义在于,以后可以轻松地将依赖项与“类似”依赖项交换,并且代码仍然可以正常工作。 “相似”通常意味着依赖项实现了某种接口。

如果我正在编写一个控制器,而我的同事正在编写一个我将在我的控制器中使用的服务,我如何才能确保他为我创建的服务能够满足我的所有需求?在传统的 OO 语言中,他的服务将是一个实现接口的类,这将迫使他实现某些方法。但是如何在 angularJS 中做到这一点?我是否必须检查服务是否具有我想要的所有方法的属性以及所有这些属性的__proto__ 是否为Function.prototype?为了检查这些方法返回的内容,我是否使用模拟对象调用它们然后检查返回的对象? 或者有更好的推荐方法吗?

【问题讨论】:

    标签: javascript angularjs dependency-injection interface duck-typing


    【解决方案1】:

    这可能是 DI 的一个特性,但重点是能够明确地看到您的依赖项来自何处,而不是它们被暂存在某个神奇的全局窗口之类的窗口上。

    JavaScript 没有强制执行接口的隐式方式。您的同事将创建一个服务或工厂,为对象提供附加的功能和属性。同样,这些函数可以返回任何想要的内容,而您无法强制执行它们返回的内容。

    如果您想确保您的同事返回您期望的结果,编写单元测试并使用 ngMock 可能是个好主意。

    另外,附加到prototype 而不是__proto__

    【讨论】:

      猜你喜欢
      • 2016-11-02
      • 2019-04-17
      • 2015-02-27
      • 2013-03-02
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2013-08-30
      相关资源
      最近更新 更多