gpt4 book ai didi

winforms - MVP 流程问题

转载 作者:行者123 更新时间:2023-12-04 06:40:21 29 4
gpt4 key购买 nike

我正在使用 Windows 窗体实现 MVP 模式,我对当前的实现有疑问,因为我正试图将其融入更复杂的架构中。
现在我有一个带有属性的完全不可知的 View ,一个在构造函数中注入(inject) View 的演示器和一个具有演示器实例的 View 。这是代码:
查看

public class MyView : IMyView
{
public MyView()
{
var presenter = new MyPresenter(this);
presenter.Init();
}
}

这是 演示者
public class MyPresenter
{
private IMyView view;
private MyModel model;
//
public MyPresenter(IMyView view)
{
// injection
this.view = view;
}
}

这样我可以完成两个任务:
  • 从 View 中调用 Presenter 上的方法
  • 与 View 交互 来自 演示者
    现在,我有两个问题:
  • 编排我使用 IoC 容器的所有内容,以便我可以轻松编写如下代码:
    var view = ioc.Resolve<IMyView>();
    var presenter = ioc.Resolve<MyPresenter>(); //view injected
    NavigationService.Show(presenter.View);

    到现在为止还挺好。
  • 第一个问题 :工作完成后如何从 Presenter 取回模型? View 使用的 Presenter 与我在 IoC 容器中使用的不同,因为 View 自己实例化了一个新的 Presenter ...所以 Presenter 公开的模型与 View
  • 中实例化的 Presenter 使用的模型不同
  • 第二个问题 :当我有一个现有模型时,如何将现有模型传递给这个 MVP 三元组?例如,如何使此代码适用于模型来自存储库的详细信息 View ?
  • 最佳答案

    为了有一个更干净的方法,也将模型注入(inject)到演示者

    public class MyPresenter
    {
    private IMyView view;
    private MyModel model;

    public MyPresenter(IMyView view, MyModel model)
    {
    this.view = view;
    this.model = model
    }
    }

    通过这样做,您始终可以在创建它的演示者之外引用模型。

    当您这样做时,您始终可以选择要使用的模型。
    例如,如果您的后端(您的模型)尚未完成,您可以编写一个 Mock-Model(当您使用模型的接口(interface)时)来测试您的演示者和您的 View 。

    希望这有帮助

    关于winforms - MVP 流程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4335693/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com