2014-11-05 34 views
1

我想在angularjs中使用一些有用的庫,例如jquery,下劃線,underscore.string。將一些有用的js庫封裝到角度模塊的最佳做法是什麼?

它可能不是一個好主意,直​​接在角碼(如控制器,指令),因爲它很難嘲笑和測試。所以我想他們包裝成角模塊:

angularUnderscore.js

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

我的問題是:

  1. 是不是很好用​​定義service?或者是工廠還是不斷更好?
  2. 使用underscoreService還是僅僅underscore就足夠好?
+0

一個非常有見地的問題。只是我的偏好:1.服務,2.下劃線 – harishr 2014-11-05 11:21:31

+0

我總是把這些放在工廠裏。下劃線(或更好:lodash)我總是把它當作一個小例外,因爲它基本上是一個實用程序庫。我從來不需要以任何方式嘲笑它,而且我實際上在我的測試中反正使用...... – Charminbear 2014-11-05 11:50:50

回答

1

我相信這確實是一個範圍問題。
雖然有些人會不同意,但我認爲將_underscore加載爲每個測試套件的依賴關係都很好。原因在於我的經驗法則是說任何「靜態」操作 - 也就是說,任何不是應用程序邏輯或數據敏感的通用算法都應單獨測試(或者根本不用_underscope類似的框架)。
這使得測試更容易編寫,更易於讀取和維護,並將罕見的情況放在一邊,如果_underscore在排序數組時遇到新錯誤,這些測試可能會失敗。此外,我看不出你對這些算法的益處(其他嘲笑,我之前提到過)DI。但是,如果一個算法更復雜並且涉及數據邏輯依賴性,那麼我肯定會引入一個工廠(或者一個服務,它們都是單例),只是爲了封裝這個邏輯並使其可以自行測試。 至於服務與工廠(vs提供商),可能有很多答案,我個人喜歡:This

相關問題