2016-04-07 9 views
0

私はこの質問が少し議論の余地があると知っていますが、これは実際にangularJSを使って大きなプロジェクトを行う開発者に役立つことがわかりました。angularjs工場のベストプラクティス

ベストプラクティス(少なくともJohn Papaによると)は、angularjsコントローラを全会一致の機能でカプセル化し、プロバイダ/サービス/ファクトリをそれらに注入すると良いと言います。あなたは大きなプロジェクトで作業する場合、最も合理的な仮定は、あなたはので、私はそれぞれの工場を持ってしまった可能な限り少ない冗長性として持つようにしたいということです

(function() { 
    "use strict"; 

    angular 
     .module("app.components") 
     .controller("ctrl", ctrl); 

    ctrl.$inject = ["$scope", "someFactory", "someOtherFactory"]; 

    function ctrl($scope, someFactory, someOtherFactory) { 
     // controller logic 
    } 
}); 

:だから、基本的にはこのようなものに終わるだろう私はそれらをサーバースコープでグループ化しています。

複雑な画面では、私は多分それらの5〜6を使用するので、注入が長く始まると想像することができます。

私がしたいと思うのは、私が注入できる#dataを持っていて、その#dataを通して$ http呼び出しを含むファクトリにアクセスしたいのです。

私の気持ちは、この#dataは、それがリダイレクトさが、より多くのあなたが設定方法と、このような工場いろいろ書いを登録することができ、プロバイダなどの工場のためのすべての設定を含むファイルであってはならないということです。

(function() { 
    "use strict"; 

    angular 
     .module("app.factory") 
     .factory("someFactory", someFactory); 

    someFactory.$inject = ["$http"]; 

    function someFactory($http) { 
     // factory logic 
    } 

    angular 
     .module("app") 
     .config(someFactoryConfig); 

    someFactoryConfig.$inject = ["#dataProvider"]; 

    function someFactoryConfig(#dataProvider) { 
     #dataProvider.register("someFactory"); 
    } 
}); 

これは、ui-router内で状態を定義する方法と似ています。

プロバイダを実装する方法に関するアイデアはありますか?

+0

ちょうど私の2セントですが、これは実際には機能を追加しないコードの可読性と維持のための災害のようです。 –

+0

あなたは@ nathan.meadowsというフェアポイントを作っています。私がこれを見ているのは、コンポーネントとは別のデータモジュール(すべての$ http呼び出し)があり、再利用可能であることです。私は私たちのチームのためのアプリの開発者ガイドを持っているので、私は可読性の上の冗長性を好むし、コードベースを理解するために新しいものを訓練するが、複数の注入を特定のポイント – Blitz

答えて

0

あなたの質問には答えられないかもしれませんが、角度2はControllers$scopeから離そうとしています。

プロジェクトを開始するときには、その機能を計画する必要があり、これらの機能からさまざまなモジュールを作成してください。これらのモジュール内では、モジュール全体をサポートするために、すべてのディレクティブ(コンポーネント)、サービス&ファクトリがあります。

この方法でアプリケーションをより小さなアプリケーションにカプセル化します。これにより、アプリケーションの1つの部分が機能しない場合、アプリケーションの残りの部分は影響を受けないことが保証されます。

角は亀裂が入り難いものであり、そのために多くの炎を得ることができます。しかし、あなたのプロジェクトを正しく計画するなら、Angularはその中で最も強力なフレームワークの1つになります。

+0

私はコントローラをコンポーネントに計画している。各コンポーネントはコントローラ、ビュー、ルータ、スタイル(sass)をカプセル化しますが、データ部分はカプセル化しません。 $ httpコールをプロジェクトの別の部分に保存します。これらをeacnモジュールに追加すると、サーバーがリソースの1つを変更した場合、複数のファイルで変更する必要があるため、複雑なレイヤーを追加するだけです。これは本当に楽しみにしています。 – Blitz

+0

@Blitz私はあなたの意見を見ます。私は、ノードサーバーやその他のサービスのバックエンドを持っていると推測しています。私が通常行っていることは、すべての工場で使用されているデータ接続サービスを作ることです。この方法で私はいつも私のデータベースに接続することができ、私のノードサーバーへの変更だけが行われなければなりません。 –

関連する問題