Bonjour, je suis novice dans l'utilisation de TornadoFX et je me demandais quelle serait la meilleure conception pour une structure MVP utilisant TornadoFX?TornadoFX - Création d'un design MVP
Dans MVP de la vue:
-> déléguerait tous les événements tels que cliquant sur le bouton à une fonction dans le présentateur
-> n'interagit pas avec le modèle
Voici quelques-unes des rugueux idées prototypes:
abstract class AbstractPresenter<View : tornadofx.View> : Controller() {
var view: View by Delegates.notNull()
fun attachView(view: View) {
this.view = view;
}
}
Je crée un présentateur qui se fixe à un AbstractView:
abstract class AbstractView<out Presenter : AbstractPresenter<*>> : View() {
abstract val presenter: Presenter
}
Maintenant, en utilisant dans un exemple:
class SampleTestView: AbstractView<SampleTestPresenter>() {
override val presenter: SampleTestPresenter by inject()
override val root: AnchorPane by fxml()
val testButton: Button by fxid()
init {
presenter.attachView(this)
testButton.setOnAction { presenter.doSomething() }
}
}
Le présentateur de l'échantillon:
class SampleTestPresenter: AbstractPresenter<SampleWindowView>() {
fun doSomething() {
println("did it")
}
}
Est-ce une mise en œuvre correcte du motif MVP en utilisant TornadoFX?
EDIT
a fait quelques changements:
class SampleWindowView : View() {
override val root: AnchorPane by fxml()
val presenter : SampleWindowViewPresenter by inject()
val button:Button by fxid()
init {
button.setOnAction { presenter.handleButtonClick() }
}
}
class SampleWindowViewPresenter : Controller() {
val sampleView: SampleWindowView by inject()
fun handleButtonClick() {
println("clicked")
}
}
Pourquoi avez-vous besoin des classes abstraites? Les classes intégrées 'View' et' Controller' de TornadoFX fonctionnent très bien pour MVC, MVP, ou même MVVM (en dépit d'être nommé Controller). –
De plus, 'View's sont aussi des singletons, donc vous pouvez juste mettre' val view: SimpleTestView par injection() 'dans votre présentateur. Je ne suis pas sûr de l'importance de la fonction onViewAttached. –
@ RuckusT-Boom Oh, je vois que je ne savais pas que les vues sont des singletons. Les classes abstraites sont là pour imposer l'idée que pour chaque vue, il y a un présentateur attaché à celle-ci. J'ai apporté des modifications au message principal. N'hésitez pas à ajouter des suggestions – Zocp