我在实施MVP模式时遇到了麻烦。解释一下:
我有一个实现接口的WinForm( View )(其对应的 IView )。 我还有演示者,最后还有模型。
但在开始时,没有IView,也没有Presenter和Model。有一个巨大的视图创造了一切。所以重构开始......
一切都很顺利,几近完美。但是现在,我遇到了这种情况,有一个关于设计的问题来找我:
我发现视图有一个接管事件的方法。这个方法非常大,有很多逻辑。所以我只是将所有方法放在演示者中以释放逻辑视图。一切都很好。
但是,然后,我想从这个逻辑中释放演示者并用它来充电模型...因为那个逻辑是业务规则!
我开始这样做,然后我意识到了一些事情:在某些地方,这个逻辑要求我实例化其他WinForms。
现在问题是: 如果演示者对业务规则一无所知,他不应该知道何时实例化WinForm。谁知道呢?当然是模型。但...
谢谢大家!
答案 0 :(得分:1)
1)我看到了两种方法:
2)演示者
3)如果视图的显示依赖于业务逻辑,那么演示者不应该做出决定
答案 1 :(得分:1)
模型如何告诉某人哪个View(以及何时)实例化?
这不是模特的工作。明确责任。这是应用程序逻辑。
谁应该是这个"某人"?
查看Application Controller and Event Aggregator pattern。
当我说主持人不应该知道创建的时间和视图时,我还好吗?只有当有人要求它(可能是模型)时,才告诉IView实现这样做。
演示者只应通过其界面了解视图。有时您可能需要执行特定于WinForms的操作,但这仍然应该以某种方式进行抽象。演示者应该完全可以进行单元测试,如果他们开始了解具体细节,那就无法实现。