クラスタイプではなく、機能別にモジュールを整理する

束縛を機能別にまとめます。 理想は、モジュールをインストールするか否かで機能全体の有効化/無効化ができることです。

例えば、Filter を実装するすべてのクラスの束縛を含む FiltersModuleGraph を実装するすべてのクラスを含む GraphsModule などは作らないようにしましょう。

その代わりに例えば、サーバーへのリクエストを認証するAuthenticationModuleや、サーバーからFooバックエンドへのリクエストを可能にするFooBackendModuleのように機能でまとめまめられたモジュールを作りましょう。

この原則は、「モジュールを水平ではなく、垂直に配置する(organize modules vertically, not horizontally)」としても知られています。