我将每个MVP三元组视为一个孤立的组件。例如,View实现了一个IView接口,Presenter当然只知道View到IView。
我可以使组件尽可能重用。 现在我必须将这些MVP组件组合起来形成一个应用程序。我想知道将这些组件尽可能分开是一种好的做法。但当然我需要让他们彼此沟通/反应。
我可以让IView暴露给其他人的演示者吗?或者我应该让演示者在不知道基础视图的情况下相互交流?
由于
答案 0 :(得分:3)
在MVP中,我将主持人视为活动的协调者。因此,它们是构成应用程序组合的自然选择。
将演示者的视图暴露给其他演示者打破了MVP模式中封装的想法。虽然它不会降低组件暴露其视图的可重用性,但它确实会降低组件的可重用性,因为它会增加组件的依赖性。
因此,我会将视图保密于演示者,只让演示者互相沟通。
详细说明以回应评论
当我说保持视图私密给主持人时,我的意思是私密:除了通过主持人的调解外,不会暴露于外界。当然,演示者可以向外界公开方法,这将导致它操纵其视图。如果演示者通过接口执行此操作,它实际上可能使用自己的视图作为接口实现的委托,但是 - 与您提议的相反 - 演示者将内容委托给视图而不是相反。
这样做可以确保或至少使所有交互逻辑更有可能保留在演示者中,并且不会在演示者和视图中散落。
视图只能由其演示者操纵。当然,您可以在多个演示者中重复使用视图,但视图实例只能由实例化它的演示者操作。如果直接公开它(甚至通过整个或部分接口),你就开始处理一个可以被多个演示者操纵的视图,而且没有一个演示者可以控制视图了。
我在视图中唯一的代码是向其演示者发送用户已做过的通知(在一些MVP讨论中也称为用户手势)。由演示者决定如何处理它。我还保留了关于哪些控件启用/禁用以响应演示者中的用户选择而不是视图中的所有逻辑。这不仅可以保持演示者中的所有交互逻辑,还可以帮助创建可单元测试的用户界面(表单)。
答案 1 :(得分:0)
good example是gwt mvp架构 和the newer version。