Привет, я новичок в использовании TornadoFX, и мне было интересно, какой лучший дизайн для MVP-структуры будет использовать TornadoFX?TornadoFX - Создание MVP-дизайна
В MVP вид:
-> делегирует все события, такие как кнопки мыши на функцию в ведущий
-> не взаимодействует с моделью
Вот некоторые из грубые идеи прототипа:
abstract class AbstractPresenter<View : tornadofx.View> : Controller() {
var view: View by Delegates.notNull()
fun attachView(view: View) {
this.view = view;
}
}
создать ведущий, который привязывается к AbstractView:
abstract class AbstractView<out Presenter : AbstractPresenter<*>> : View() {
abstract val presenter: Presenter
}
Теперь, используя его в примере:
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() }
}
}
демонстрационного Presenter:
class SampleTestPresenter: AbstractPresenter<SampleWindowView>() {
fun doSomething() {
println("did it")
}
}
Является ли это приличная реализация шаблона MVP с помощью TornadoFX?
EDIT
внесены некоторые изменения:
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")
}
}
Зачем вам нужны абстрактные классы? TornadoFX, встроенный в классы 'View' и' Controller', отлично подходит для MVC, MVP или даже MVVM (несмотря на то, что он называется Controller). –
Кроме того, 'View' также являются синглтонами, поэтому вы можете просто поместить 'val view: SimpleTestView с помощью inject()' в ваш презентатор. Я не уверен, насколько важна функция onViewAttached. –
@ RuckusT-Boom О, я вижу, я не знал, что взгляды - это одиночные игры. Абстрактные классы предназначены для обеспечения того, чтобы для каждого представления был прикреплен Ведущий. Я внес изменения в главный пост. Не стесняйтесь добавлять какие-либо предложения к нему. – Zocp