У меня есть приложение с кучей вкусов продуктов, которые в основном представляют собой белые ярлыки одного приложения. Однако время от времени происходит некоторое отклонение от основного потока в каком-то аспекте, потому что клиент хочет чего-то немного другого. До сих пор мы редактировали код для этих случаев и использовали спагетти-код (множество «если» и «иначе»), чтобы гарантировать, что другие приложения не сломаются. Излишне говорить, что это не очень масштабируемый (или даже разумный) способ сделать это.
Одним из вариантов может быть запись классов действий в исходных папках productFlavor, т. е. src/flavor1/java/AnActivity.java
, src/flavor2/java/AnActivity.java
и т. д. Поскольку код productFlavor не может переопределять src/main
classes, это потребует копирования одних и тех же классов для каждого нового варианта, даже если их нет. настройка. Мне этот вариант не очень нравится. Это приводит к большому количеству избыточного кода, а имена классов в конечном итоге становятся не такими описательными, поскольку все они должны иметь одинаковые имена, чтобы переопределить другие, даже если они могут делать что-то другое.
Другим вариантом может быть использование чего-то вроде Dagger
для создания ObjectGraph
и внедрения Intent для разных реализаций. Например, если это flavor1
, при нажатии кнопки X вводится намерение для ActivityA
, а если это flavor2
, вводится намерение для ActivityB
.
Это кажется лучшим способом сделать это, но я все еще не уверен, как реализовать классы, которые переопределяли бы привязки по умолчанию ObjectGraph
.
Есть идеи по реализации или другим вариантам? Я не привязан к Dagger
, я только начинаю изучать внедрение и тестирование зависимостей, чтобы другие фреймворки работали так же хорошо.