gpt4 book ai didi

c# - MVP 三元组之间的通信

转载 作者:太空狗 更新时间:2023-10-29 21:46:12 26 4
gpt4 key购买 nike

好的,伙计们,例如我有这个表格,我之前告诉过你Only one DockContent in DockPanel

从那时起我所做的一个编辑是当用户单击左 Pane 中的某个项目时,每个项目中的单词都会出现。我轻松地为左 Pane 创建了一个三元组。

它有项目演示者、项目 View 、项目模型。这是每个东西的接口(interface):

interface IProjectsModel
{
void AttachPresenter(IProjectsModelObserver observer);
System.Collections.Generic.List<Project> projects { get; }
Project selectedProject { get; set; }
}

public interface IProjectsViewObserver
{
void UserChangedSelectedProject(Project project);
}
public interface IProjectsModelObserver
{
void SelectedProjectChanged(Project project);
}

public interface IProjectsView : IView
{
List<Project> projects { set; }
Project project { set; }

void AttachPresenter(IProjectsViewObserver presenter);
}

所以目前我正在考虑为右 Pane 制作一个全新的另一个 MVP 三元组。但这不是主要问题。我遇到的主要问题是如何在上面告诉您的 MVP 三元组之间进行通信?

我在网上看到一些文章说在这种情况下有必要在项目中引入一些模型协调员吗?

伙计们,我的问题是:

  1. 我做的是两个三合会而不是一个吗?
  2. 如何协调两个三元组之间的关系?
  3. 任何提议/建议/提议/建议/提示任何很多很多很多您认为对我有用的其他内容将不胜感激!

非常感谢,伙计们!感谢您的关注和时间!

最佳答案

要在演示者之间进行协调,您可以让您的 MainForm 类实现 IProjectsViewObserver 并在用户选择不同的项目时在右侧停靠面板上设置文本。例如:

class MainForm : IProjectsViewObserver
{
void UserChangedSelectedProject(Project project)
{
rightDockPane.setText(project.getText());
}
}

如果你想测试这个行为,你可以创建一个单独的类:

class DockPaneProjectUpdater : IProjectsViewObserver

尽管在这种情况下这是不必要的,因为代码非常简单。

您可以使用 anonymous methods 研究更简单的方法来做到这一点,但我对 C# 的了解还不够,无法在这方面帮助您。

Am I right doing two triads instead of just one?

是的,因为停靠栏和 Pane 是独立的组件,它们可能需要单独的 MVP 三元组。您可以通过尝试使代码可重用和可测试来决定 MVP 三元组的粒度(小度)。

How can I coordinate two triads between each other?

创建一个窗口级演示器,连接子演示器并可以协调三元组之间的行为。您可以让窗口呈现器成为 IProjectsViewObserver 并根据 DockContent 执行操作。或者,如果您真的想模块化/单元测试行为,您可以创建一个单独的演示者类(通常是匿名类)用于三元组间的通信。

Any proposes/suggestions/offers/advices/tips any many many many other stuff you think as useful for me will be very appreciated!

阅读有关 MVP 和 presenter-first 的维基百科和在线文章. MVP 的最大好处是可测试性和行为(演示者)模块化,因此请确保您正在利用它们 unit testing (通常使用模拟/DI 框架)并在您可以重用代码时将行为重构到 MVP 三元组中。

弄清楚如何有效地应用 MVP 模式需要一些时间,所以请耐心等待!

关于c# - MVP 三元组之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555794/

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