MVP正确的遏制方向?

Cro*_*roo 0 mvp gwt

我已经查看了一些关于MVP模式的不同示例,我发现了它的各种实现.我不清楚哪一个应该包含另一个:视图还是演示者?

顾名思义:

public MyPresenter(){
   display = new MyView(this);
}
Run Code Online (Sandbox Code Playgroud)

或者作为我理智的逻辑(以及关于MVP 的维基百科页面)

public MyView(){
   presenter = new MyPresenter(this);
}
Run Code Online (Sandbox Code Playgroud)

或者我应该使用完全不同的方法来创建这些对象吗?

Tho*_*yer 5

DOM是浏览器中成本最高的东西之一,因此构建小部件在GWT中成本很高.相反,演示者通常很便宜,因此可以随意进行删除和重建.

这就是为什么我建议作为经验法则尝试在许多演示者中重复使用您的视图(使它们成为单例,或者将它们缓存几分钟).

这意味着您(短命的)演示者应该参考您的(长寿)视图.

我非常相信依赖注入,所以我不会在另一个中实例化.这极大地有助于管理组件的生命周期,每个组件都独立于另一个组件.
因此,您将视图注入到演示者中:创建演示者,选择视图(创建视图或从缓存中获取视图)并将其提供给演示者.然后你将销毁演示者并保持视图在下次需要时重复使用(与另一个演示者).