Я разрабатываю набор продуктов, которые будут работать во встроенной промышленной системе, где одна база кода должна быть слегка изменена, чтобы стать несколькими различными приложениями (~ 20 продуктов). Он будет использовать Java 13 и JavaFX, и я намерен использовать Dagger 2 для внедрения различных представлений и контроллеров F XML в зависимости от создания различных продуктов. Например, один продукт может иметь форму ввода, содержащую текстовое поле с почтовым индексом, а вариант может вместо ComboBox иметь текстовое поле:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1">
<center>
<GridPane BorderPane.alignment="CENTER">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextField promptText="First Name" />
<TextField promptText="Last Name" GridPane.columnIndex="1" />
<TextField promptText="Zip Code" GridPane.rowIndex="1" />
<CheckBox mnemonicParsing="false" text="Include inflation factor" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<Button mnemonicParsing="false" text="Do Something" GridPane.rowIndex="2" />
<Button mnemonicParsing="false" text="Cancel" GridPane.columnIndex="1" GridPane.rowIndex="2" />
</children>
</GridPane>
</center>
</BorderPane>
Для обоих вариантов контроллер будет очень похож и только обработка почтового индекса TextField против ComboBox будет отличаться.
В других вариантах обработчик событий кнопки «Сделать что-то» будет выполнять различные действия в зависимости от варианта продукта. Я хотел бы иметь возможность определять эти варианты во время сборки, чтобы сервер сборки на основе Gradle мог указать, какой вариант собирать.
Как я могу go об этом использовать Dagger 2, и является ли это наиболее подходящим решением?