안녕하세요 저는 TornadoFX를 처음 사용하고 MVP 구조에 가장 적합한 디자인이 TornadoFX를 사용하게 될지 궁금합니다. MVP에서TornadoFX - MVP 디자인 만들기
보기 :
은 -> 같은 발표자의 기능 버튼 클릭으로 모든 이벤트를 위임 할
은 -> 모델과 상호 작용하지 않는
여기의 일부입니다 거친 프로토 타입 아이디어 : 나는 추상보기에 붙어서 발표자를 만들
abstract class AbstractPresenter<View : tornadofx.View> : Controller() {
var view: View by Delegates.notNull()
fun attachView(view: View) {
this.view = view;
}
}
:
,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 by SimpleTestView'를 당신의 발표자에 넣을 수 있습니다. onViewAttached 함수가 얼마나 중요한지 잘 모르겠습니다. –
@ RuckusT-Boom 아,보기가 싱글 톤이라는 것을 몰랐습니다. 추상 클래스는 모든 뷰에 프레젠터가 첨부된다는 아이디어를 강요합니다. 메인 포스트를 변경했습니다. 언제든지 제의를 추가 할 수 있습니다. – Zocp