Я хочу реализовать MVP в TornadoFX без использования его инъекции (потому что это ухудшает читабельность и, по моему мнению, не имеет никакого смысла).
Моя идея хорошей реализации MVP заключается в следующем:
interface ModelEventHandler {...}
interface ViewEventHandler {...}
class Model(val eventHandlers: List<ModelEventHandler> = listOf<ModelEventHandler>())
class View(val eventHandlers: List<ViewEventHandler> = listOf<ViewEventHandler>())
class Presenter(val view: View): ModelEventHandler, ViewEventHandler
Который затем можно использовать следующим образом:
val model = Model()
val view = View()
val presenter = Presenter(view)
model.eventHandlers += presenter
view.eventHandlers += presenter
Проблема в том, что с TornadoFX вы вынуждены позволить классу App
выполнить инициализацию представления за вас, и вы не можете передавать какие-либо параметры, вы также не можете выбрать порядок, в котором модель, представление и инициализатор Presenter (что не так уж и большая проблема, но я могу представить, что это вызывает некоторые проблемы).