【问题标题】:Is there a point to dependency injection container in Javascript?Javascript中是否有依赖注入容器的意义?
【发布时间】:2018-01-01 14:15:14
【问题描述】:

我是一名长期的后端开发人员,但最近我设法开发了一些中型单页网络应用程序。

在服务器端,我使用过许多现代框架,如 Spring、Grails、Symfony、Silex、Slim 等,我非常喜欢 Silex 或 Slim 的微框架概念(在所有情况下都是 MVC 框架)。

在客户端,由于应用程序性质不同,我认为MVVM 是最好的方法。

快速评估一些微型 JS 框架(riotbackbone)并与我的服务器端背景进行比较,我注意到在 JS 框架中,依赖注入容器(DIC)不被视为框架的基本部分(微型至少是框架)。

在每个服务器端现代MVC(微)框架上,DIC 是框架的基础,但我没有看到这发生在 Javascript 框架上(至少是微框架,我知道胖胖的 Angular 有它)。

根据我的搜索,带有一些追随者的 JS 的唯一独立 DIC 容器是 bottlejs GitHub 上只有 672 颗星。将其与有许多独立 DIC 项目的 PHP 进行比较,例如 Pimple(1570 颗星)或 PHP-DI(1040 颗星),您会发现差异很大

你认为是很多 js 微框架都会犯的严重错误或贬值吗? 或者DIC的模块化、可测试性和可维护性在JS中可以通过其他方式实现。

【问题讨论】:

  • 我认为这个问题不适合 SO。也许 - softwareengineering.stackexchange.com
  • 我不知道软件工程的存在。确实在堆栈溢出中存在与 python stackoverflow.com/questions/6880884/… 相关的类似问题
  • @AbhinavGauniyal 在引用其他网站时,指出cross-posting is frowned upon 通常会有所帮助
  • 就我个人而言,我也认为这个问题不适合 SO(可能非常基于意见)。然而,有一些框架内置了它,例如 AngularJs 就可以了。 JS有必要吗,我觉得没必要,我觉得大部分框架都没有内置,因为缩小问题
  • 比较 GH 星是没有意义的。 PHP DI 项目是 5 年以上。 JS 项目不是。单例可以用 JS 模块自然生成,所以这不是 DI 关心的问题。 JS 模块模拟也可以实现可测试性(代理查询等)。这是一些框架(尤其是 React-like)所依赖的。

标签: javascript mvvm dependency-injection ecmascript-6 frameworks


【解决方案1】:

可以使用 JS 模块自然生成单例,所以这不是 DI 关心的问题。 JS 模块模拟也可以实现可测试性(代理查询等)。这是一些框架(Durandal、React-like)所依赖的。

在测试平台 ES6 模块中,通常以任何方式在后台使用 require,因此该方法仍然适用。 proxyquire 和其他缓存处理库可能有其局限性(深度依赖),但在编写良好的测试中,您通常会模拟更高一级的单元,因此这通常有效。这就是 Jest 内部的做法,通常用于测试 React 和 React-like。

所以这取决于这些“微框架”到底是什么。至于当前的宏框架,React 应该不需要 DIC(而且,它不是固执己见,扩展它的功能是开发人员的责任)。虽然 Angular、Aurelia、Ember、Polymer 和 Vue 2 具有 DIC - 因为它通常有利于应用程序设计。

【讨论】:

  • 如果我是对的 React 和 Vue2 是仅查看组件框架,它们不是应用程序框架,因此如果它们使用 DI,则可能仅限于视图管理而不是整个应用程序。或不? ——
  • Vue 是组件化的,React 也是。这取决于什么被认为是框架和什么是库的观点。在提到的那些中,Backbone 肯定是更少的“框架”。 DI 的实用性不依赖于语言(Angular 1)。但它可以受益于语言特性(Angular 2+ 和 TS)。
猜你喜欢
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 2016-12-06
  • 2013-04-30
  • 1970-01-01
  • 2014-10-05
  • 2014-09-15
  • 1970-01-01
相关资源
最近更新 更多