基本的に単一のアプリのホワイトラベルである製品フレーバーがたくさんあるアプリがあります。ただし、クライアントがわずかに異なるものを求めているため、一部のフレーバーでメイン フローから逸脱することがあります。これまでのところ、これらのケースのコードを編集し、スパゲッティ コード (多くの 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
調べ始めたところなので、他のフレームワークも同様に機能します。