0

こんにちは、TornadoFX を使用するのは初めてで、MVP 構造の最適な設計は TornadoFX を使用することでしょうか?

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")
  }
}
4

1 に答える 1