gpt4 book ai didi

.net - 如何在 .NET 中为 MVP 模式公开用户控件的属性

转载 作者:行者123 更新时间:2023-12-04 14:41:47 25 4
gpt4 key购买 nike

我正在实现一个简单的 UserControl,它实际上是一个奇特的 TextBox。它的功能之一是您可以设置格式规范,并且此格式会自动应用于其内容。例如,如果您将格式规范设置为"000",内容为"42",则将出现"042"

我正在按照 MVP 模式实现此 UserControl。实现类似于:how Implement usercontrol in winforms mvp pattern? .另外,检查这个问题:passive view and display logic

方法#1

我在 View 中的 Title 属性如下所示:

private string title;
public string Title {
get { return title; }
set { title = value; titleTextBox.Text = presenter.Format(title); }
}

我觉得这个实现增加了不必要的耦合。例如,如果我更改 PresenterFormat 方法,那么我将不得不遍历所有 View 并适当更改调用语句。

方法#2

我在 View 中的 Title 属性如下所示:

public string Title {
get { return presenter.Title; }
set { presenter.Title = value; }
}

我在 Presenter 中的 Title 属性如下所示:

private string title;
public string Title {
get { return title; }
set { _view.SetTitle(this.Format(value); }
}

现在我必须在 View 接口(interface)和 View 实现中添加 SetTitle 方法:

public void SetTitle(string title) {
titleTextBox.Text = title;
}

因此,通过这种方法,我得到了这个丑陋的 SetTitle 类 Java 方法。

方法#3

不是调用 SetTitle,而是在 View 中创建一个新属性 RealTitle 并设置它。这个 Real 前缀仍然很难看。

你的方法

你能想出更好的办法吗?

用例

UserControl 应该这样使用:

var c = new FancyTextBox();
c.Format = "000";
c.Text = "42";
Controls.Add(c);

此代码段应在 UserControl 中显示 "042"

大局

Form            FancyTextBoxView             FancyTextBoxPresenter
| | |
| ftb.Text = "42" | |
|-------------------->| |
| | |
| | A |
| |----------------------------->|
| | |
| | B |
| |<-----------------------------|

A 和 B Action 是什么?我希望格式化的文本出现在 UI 中。格式化代码在 Presenter 中。 View 有一个 titleTextBox,它将在 UI 中保存文本。

最佳答案

为什么不像这样定义 View 的 Title 属性呢?

public string Title {
get { return titleTextBox.Text; }
set { titleTextBox.Text = value; }
}

绝对没有理由定义额外的 SetTitle 方法。此外,在 MVP 中,您的 View 永远不会知道您的 Presenter。

然后每当您的 Format 函数被触发时,您可以从那里设置 View 的标题,例如:

void OnFormatCalled()
{
_view.Title = FormatTitle(_view.Title);
}

关于.net - 如何在 .NET 中为 MVP 模式公开用户控件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7610511/

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