2010-04-26 33 views
5

经典的强类型MVP模式看起来像这样在斯卡拉:改善MVP斯卡拉

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(...) 
} 

现在,我不知道是否有改善它的任何很好的方式,我很想念......

+1

虽然一个有趣的话题,这不是一个很好的SO问题。这是非常广泛的,而且不太可能有任何事实,客观的答案。 – jpswain 2011-09-01 19:35:41

+1

@ orange80我添加了一个赏金以防人们会发现更好的解决方案,比如如何处理View to Presenter循环依赖。不过,使用社区wiki可能会更好。 – 2011-09-01 20:06:57

+0

@Mark Jayxcela:不幸的是,我无法让它成为一个社区维基... – 2011-09-02 08:12:33

回答

2

MVP模式的好处在于它使得您的UI代码单元可以被测试。

我建议你避免在演示者中实例化视图并将其传递给构造函数。 这将允许你只是嘲笑View和单元测试Presenter

替换你的代码

case object Presenter1 extends Presenter[View1] { 
    val view = View1(...) 
} 

case object Presenter1(val view: View1) extends Presenter[View1] { 
    ... 
}