改进Scala中的MVP

Ale*_*nov 5 mvp user-interface design-patterns scala

经典的强类型MVP模式在Scala中看起来像这样:

trait IView { }

trait Presenter[View <: IView] {  // or have it as an abstract type member
  val view : View
}

case class View1(...) extends IView { ... }

case object Presenter1 extends Presenter[View1] { 
  val view = View1(...)
}
Run Code Online (Sandbox Code Playgroud)

现在,我想知道是否有任何改善它的好方法,我错过了...

Mai*_*kov 2

MVP 模式的好处是它使您的 UI 代码单元可测试。

我建议您避免在演示者中实例化视图并将其传递给构造函数。这将允许您模拟View并单元测试Presenter.

替换你的代码

case object Presenter1 extends Presenter[View1] { 
  val view = View1(...)
}
Run Code Online (Sandbox Code Playgroud)

case object Presenter1(val view: View1) extends Presenter[View1] { 
  ...
}
Run Code Online (Sandbox Code Playgroud)