【发布时间】:2023-04-09 13:58:01
【问题描述】:
我在实现 MVP 模式时遇到了麻烦。简单解释一下:
我有一个 WinForm(View),它实现了一个接口(它对应的IView)。 我还有一个 presenter,最后还有一个 model。
但一开始,没有IView,也没有Presenter,也没有Model。有一个巨大的景观造就了一切。于是重构开始了……
一切都很顺利,几乎完美。但是现在,我遇到了这种情况,我想到了一个关于设计的问题:
我发现视图有一个接管事件的方法。这个方法很大,有很多逻辑。所以我只是把所有的方法放在presenter中,解放逻辑的视野。一切都很好。
但是,我想把演示者从这个逻辑中解放出来,并用它来为模型充电......因为那个逻辑是业务规则!
我开始这样做,然后我意识到一些事情:在某些地方,这个逻辑要求我实例化其他 WinForms。
现在问题来了: 如果演示者对业务规则一无所知,他不应该知道何时实例化 WinForm。那么谁知道呢?当然是模型。但是……
- 模型如何告诉某人使用哪个视图(以及何时) 实例化?
- 这个“某人”应该是谁?
- 当我说我没事的时候 演示者不应该知道何时以及创建哪个视图?仅在有人要求(可能是模型)时才告诉 IView 实现这样做。
谢谢大家!
【问题讨论】:
-
我不确定这是否有帮助,但我认为你的意思是 MVC,你有 MVP。如果是这样,那么通知模型的是控制器,并且是模型和视图之间的“粘合剂”。祝你的项目好运 :-) 以下是更多信息的链接:tomdalling.com/blog/software-design/…
-
感谢 Jacob,但我实际上是指 MVP。据我了解,MVP 中的 Model 涉及到 Controller 和 MVC 的 Model。 MVP 仅通过 Presenter 将 View 与 Model 解耦。 (这就是为什么演示者不应该知道业务规则)。不过还是谢谢! ;)
标签: c# winforms design-patterns mvp