2017-01-25 6 views
0

私はAngularJSの新生児です。Angularを使って新しいプロジェクトを作成すると、すでに他の開発者によって作成されたコードがあります。私がコードに深く触れ始めると、View-Controller-Factoryの「接続」実装の2つの方法が分かりました。 最初のものは角チュートリアルのようであった:工場とコントローラ自体へのポインタは、工場の変数を有するようにした第二のすべてのコントローラ機能でAngularJS:コントローラと工場を正しく使用

app.factory('dashboardFactory', function(){ 
var widgets = []; 
    return {  
     getWidgets: function() { 
      return widgets; 
     }, 
} 

コントローラー:

app.controller('dashboardController', function (dashboardFactory){ 
    /*Controller as implementation*/ 
    this.widgets = dashboardFactory.getWidgets(); 
}) 

ファクトリーポインタ:

コントローラ:

app.controller('mapController', function (mapFactory){ 
this.mapFactory= mapFactory; 
this.getRowStatus = mapFactory.getRowStatus; 
this.getRowTooltip = mapFactory.getRawTooltip; 
}) 

ファクトリー:第2の実施で

app.factory('mapFactory', function(){ 
     getRowStatus: function (grid, row) { 
      var result = ''; 
      var currentStatus = row.entity.ONLINE_STATUS; 
      switch (currentStatus) { 
       case 1: 
        result = 'carInMotionLight'; 
        break; 
       case 2: 
        result = 'carInIdleLight'; 
        break; 
       case 4: 
        result = 'carAlertLight'; 
        break; 
      } 
      return result; 
     }, 

     getRawTooltip: function (grid, row) { 
      var result = 'Engine off'; 
      var currentStatus = row.entity.ONLINE_STATUS; 
      switch (currentStatus) { 
       case 1: 
        result = 'In motion'; 
        break; 
       case 2: 
        result = 'In idle'; 
        break; 
       case 4: 
        result = 'Alert'; 
        break; 
      } 
      return result; 
     }, 
}); 

コントローラがきれいに見えるとファクトリ関数の内部では、コントローラの範囲にあり、あなたは別のファクトリ関数を呼び出す必要がある場合は、定義された工場出荷時の変数を使用する必要があります。

第1または第2の実装を使用しても、両方とも同じ結果が得られています。 あなたはどう思いますか?どちらを使うのが良いですか?

+0

質問に直接答えはないかもしれませんが、私はAngularJSで始まる人々の間でJohn Papa AngularJSスタイルガイドを共有したいと思います。あなたが時間を見つけたら、それは最も良いaprroachesを議論する素敵な明確な内容を持っています。 https://github.com/johnpapa/angular-styleguide –

答えて

1

AngularJSの商業的な仕事では、コントローラを「薄く」保ち、多くのロジックをサービス/工場に押し込もうとします。 AngularJS 1.5でES6を使用していますが、そのように保つのが難しいこともありますが、一般的には、メソッドがDRYになるように多くの関数型プログラミングをサービスに書き込もうとします。

コントローラは特定のページに結びついているのでDRYできません(これはサービスで多くのロジックを利用するための議論です)。

+0

2番目の方法が好ましいとお考えですか? – AlexBerd

+1

私は個人的にはいと言うでしょう。私の同僚の大部分は、このようなアプローチ(60+以上のチーム)に同意します。 – rrd

関連する問題