基本的に単一のアプリのホワイトラベルである製品フレーバーがたくさんあるアプリがあります。ただし、クライアントがわずかに異なるものを求めているため、一部のフレーバーでメイン フローから逸脱することがあります。これまでのところ、これらのケースのコードを編集し、スパゲッティ コード (多くの if と else) を使用して、他のアプリが壊れないようにしています。言うまでもなく、これは非常にスケーラブルな (またはまともな) 方法ではありません。
1 つのオプションは、アクティビティ クラスを productFlavor ソース フォルダーsrc/flavor1/java/AnActivity.java( src/flavor2/java/AnActivity.java、 など) に書き込むことです。productFlavor コードはクラスをオーバーライドできないためsrc/main、カスタマイズがない場合でも、新しいフレーバーごとに同じクラスをコピーする必要があります。私はこのオプションがあまり好きではありません。その結果、多くの冗長なコードが発生し、クラス名はもはやそれほど説明的ではなくなります。別のことをしている可能性がある場合でも、他のクラスをオーバーライドするには、すべて同じ名前にする必要があるためです。
Dagger別のオプションは、さまざまな実装のインテントを構築しObjectGraphて注入するようなものを使用することです。たとえば、 の場合flavor1、ボタン X がクリックされると、 のインテントActivityAが注入され、 の場合flavor2、 のインテントActivityBが注入されます。
これはこれを行うためのより良い方法のように思えますが、デフォルトでバインディングをオーバーライドするクラスを実装する方法がまだわかりませんObjectGraph。
実装やその他のオプションに関するアイデアはありますか? 依存関係の挿入とテストをDagger調べ始めたところなので、他のフレームワークも同様に機能します。