我想在TornadoFX中实现MVP,而不使用它的注入(因为它损害了可读性,并且我认为毫无意义)。
我对实现最佳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
类为您进行视图初始化,并且您无法传递任何参数,也无法选择模型,视图的顺序并初始化演示者(在这里这不是什么大问题,但我可以想象会引起一些问题)。