我有一个应用程序,其中包含一堆产品风格,基本上是单个应用程序的白标签。但是,有时,由于客户想要一些稍微不同的东西,因此在某些方面与主要流程有一些分歧。到目前为止,我们一直在为这些案例编辑代码并使用意大利面条代码(大量的 if 和 else)来确保其他应用程序不会中断。不用说,这不是一种非常可扩展(甚至是理智)的方式来做到这一点。
一种选择是在 productFlavor 源文件夹中编写活动类,即src/flavor1/java/AnActivity.java
,src/flavor2/java/AnActivity.java
等。由于 productFlavor 代码不能覆盖这些src/main
类,因此即使没有自定义,这也需要为每个新风味复制相同的类。我不太喜欢这个选项。它导致大量冗余代码和类名最终不再具有描述性,因为它们都必须具有相同的名称才能覆盖其他名称,即使它们可能正在做不同的事情。
另一种选择可能是使用类似的东西为不同的实现Dagger
构建ObjectGraph
和注入意图。例如,如果是flavor1
,当单击按钮 X 时,将注入一个意图ActivityA
,如果是flavor2
,则注入一个意图ActivityB
。
这似乎是一种更好的方法,但我仍然不确定如何实现将覆盖默认绑定的类ObjectGraph
。
关于实现或其他选项的任何想法?我不受约束Dagger
,我刚刚开始研究依赖注入和测试,以便其他框架也能正常工作。