什么'将一些有用的js库封装到angular模块是一种很好的做法

What's the good practice to wrap some useful js libraries to angular modules?

本文关键字:模块 很好 一种 angular 封装 有用 什么 js      更新时间:2023-09-26

我想在angularjs中使用一些有用的库,例如jquery、下划线、undercore.string.

直接在角度代码(比如控制器、指令)中使用它们可能不是一个好主意,因为很难模拟和测试。所以我想把它们包装成角度模块:

angularUndercore.js

define(['angular', 'underscore'], function(ng, _) {
  return ng.module('3rd-libraries')
    .service('underscoreService', function() {
      return _;
    });
});

我的问题是:

  1. 使用.service()来定义service好吗?还是工厂或工厂更好
  2. 使用underscoreService好吗,还是仅仅使用underscore就足够更好了

我认为这实际上是一个范围问题
尽管有些人会不同意,但我认为将_underscore作为每个测试套件的依赖项加载是可以的。原因是我的经验法则说,任何"静态"操作,也就是说,任何使用的非应用程序逻辑或数据敏感的通用算法,都应该单独测试(或者在类似underscope的框架中根本不测试)。
这使测试更易于编写,更具可读性和可维护性,并且将罕见的情况放在一边,如果_underscore在排序数组时出现新错误,这些测试可能无论如何都会失败。此外,我看不出你从这些算法的DI中受益(除了我之前提到的嘲笑)。

然而,如果一个算法更复杂,并且涉及数据逻辑依赖性,我肯定会引入一个工厂(或服务,两者都是单件),只是为了封装这个逻辑并使其本身可测试。至于服务与工厂(与供应商),可能有很多答案,我个人很喜欢:这个