你好我是新來使用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() }
}
}
樣品主持人:
class SampleTestPresenter: AbstractPresenter<SampleWindowView>() {
fun doSomething() {
println("did it")
}
}
這是一個體面的實施用TornadoFX MVP模式的?
編輯
做了一些改變:
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's也是單例,所以你可以在演示者中通過注入()''來放置'val view:SimpleTestView。我不確定onViewAttached函數有多重要。 –
@ RuckusT-Boom哦,我看到我不知道這些意見是單身人士。抽象類在那裏強制實現這樣的想法,即對於每個View,都有一個Presenter附加到它。我對主文章進行了更改。隨意給它增加任何建議 – Zocp