web-dev-qa-db-ja.com

Angular.jsアプリケーションでモジュールを構造化するにはどうすればよいですか?

私はAngular.jsにかなり慣れていないので、混乱するのは、アプリケーションでモジュールを最適に使用する方法です。モジュールには、AngularJSの他の一般的な構成要素(コントローラー、ディレクティブ、フィルター、サービスなど)を含めることができるように思えますが、ここから、どのモジュールにどの内容を含める必要があるかがわかりません。

  • アプリケーション内の他のすべてのオブジェクトを含む1つのモジュールが必要ですか?これはセットアップが最も簡単なようですが、これは God Object Anti-Pattern の匂いがします。

  • オブジェクトのタイプごとにモジュールを分割する必要がありますか?つまり、コントローラ用の1つのモジュール、ディレクティブ用の1つのモジュールなどですか?

  • 用途で分ければいいですか?アプリケーションの一部に使用されるすべてのディレクティブ、サービス、およびフィルターが一緒になるようにするには?

  • 私がまだ見ていない/考えていない他のいくつかの戦略?

どんな助けでも大歓迎です。

5
GSto

おそらくあなたは新しくはなく、今までに答えがあります。 @KeesDijkおよび@Aaronからのリンクは、すでに包括的な回答を提供しているはずです。

以前にも同じ質問があったので、この回答はAngularjsの学習を始める人に役立つかもしれません。

アプリケーション内の他のすべてのオブジェクトを含む1つのモジュールが必要ですか?これはセットアップするのが最も簡単なようですが、これは神オブジェクトのアンチパターンのにおいがします。

あなた自身に答えがあります。それが本当に小さなアプリでない限り、単一のモジュールを持つことは通常良い選択ではありません。

オブジェクトのタイプごとにモジュールを分割する必要がありますか?つまり、コントローラ用に1つ、ディレクティブ用に1つなどです。

30個を超えるコンポーネントがあると、コントローラー/ディレクティブ/サービス/フィルターのモジュールがそれぞれ4つあるとします。各モジュールには7〜8個のコンポーネントがあります。アプリケーションが大きくなると、前のオプションのようになります。

また、ユーザー管理などの1つの機能を再利用する場合は、複数のモジュールに依存する必要があります。

用途で分ければいいですか?アプリケーションの一部に使用されるすべてのディレクティブ、サービス、およびフィルターが一緒になるようにするには?

これは最も一般的な推奨プラクティスです。 1つの機能につき1つのモジュール/フォルダー。再利用や(他のプログラマによる)読み取りが簡単で、アプリケーションの成長に合わせて拡張できます。

再利用性も優れており、 'user'モジュールに依存するだけで済みます。

私がまだ見ていない/考えていない他のいくつかの戦略?

前のオプションに基づいて、バリエーションを持つことができます。

  • サブ機能によってネストされた方法でモジュールを構造化すると便利です。たとえば、「user-list」モジュールと「user-edit」モジュールを含むモジュール「user」を持つことができます。 (例 https://github.com/angular-app/angular-app を参照)
  • 共通/共有モジュールを他のモジュールから分離して、それらにプレフィックスを付けることができます。例'common'、 'common-model-user'、 'common-ui-modal'など.
1
ijemmy