2017-07-06 16 views
1

大きなアプリケーションをモジュールに分割する際に推奨されるアプローチとトレードオフは何ですか?角度モジュールの依存性の方向性

特に、私は循環依存を回避しようとします。コンポーネントとサービスを1つのモジュールで一度だけ宣言しなければなりません。

これらの慣行に従わないとどのような影響がありますか?

モジュールA、ルートモジュールがモジュールBとCをインポートし、モジュールSとモジュールBの両方にサービスSがある場合、実行時にサービスSのインスタンスが2つ存在します。

モジュールBがSの実装を1つ提供しているが、モジュールCが別の実装を提供している場合はどうなりますか?それがうまくいくのでしょうか、それとも第二のサービス登録が最初のサービス登録が上書きされる最後の勝利の状況になりますか?

+0

あなたが持っているそれらの質問は、理論を正しくテストするサンプルアプリケーションをビルドすることで簡単に答えられるでしょうか?そのうちのいくつかはhttps://angular.io/guide/styleguide#shared-feature-module –

+0

でご覧になれます。https://angular.io/guide/ngmodule-faqとhttps: //angular.io/guide/ngmodule-faq#what-if-i-import-the-same-module-twice – DeborahK

答えて

1

@HarryNinhと@DeborahKが示唆しているように、公式docsがあなたのモジュールを分割することで見つけた最高の記事です。これはあなたのモジュールを分割するための規定された方法であり、必要があればそれから逸脱することが自由です。 私は前と同じ問題を抱えており、このようにモジュールを分割することになりました。 (これは公式ドキュメントや自分の経験から大きく左右されます)

AppModuleまたはルートモジュール - これは最初に角度ロードされるモジュールです。私はこれを可能な限り小さくし、SharedModuleやCoreModuleなど他のモジュールをここからインポートしようとしています。

共有モジュール - このモジュールでは、多くの場所で必要とするモジュールを配置します。たとえば、FormsModuleを常に使用する必要があることがよくある場合は、ここに入力します。私の経験から見たもう一つの例は、できるだけ多くのコンポーネントをロードしていて、FormsModuleのようなインポートを繰り返していることです。もう1つの例は、angle/materialやng-bootstrapなどのUIフレームワークを使用している場合、遅延読み込みモジュールから同じインポートを繰り返さないようにSharedModuleに配置する必要があります。あなたのFeatureModulesからこれをインポートしてください。私はあなたがモジュールの輸入の重複があるかどうか疑問に思うかもしれないことを知っています。よく公式ドキュメントから取って

同じモジュールを2回インポートするとどうなりますか?

これは問題ではありません。 3つのモジュールがすべてModule 'A'をインポートすると、 Angularはモジュール 'A'を最初に検出したときには を評価し、再度実行しません。

コアモジュール - これは、単一のインスタンスが必要なサービスのプロバイダを配置する場所です。 AuthService、または一部のデータサービスをお持ちの場合は、理想的な候補者です。これはのみあなたのAppModuleにインポートする必要があります。

フィーチャーモジュール - これはコンポーネントとサービスに関連する機能を配置する場所です。通常、AppModuleからこれをインポートしますが、できるだけ負荷を軽減したいので、個人的にはそうではありません。

これが役に立ちます。

関連する問題