我正在实现一个UserControl
实际上很花哨的简单TextBox
. 它的功能之一是您可以设置格式规范,并且此格式会自动应用于其内容。例如,如果您将格式规范设置为"000"
,内容为"42"
,"042"
则将出现。
我正在UserControl
按照 MVP 模式实现这一点。实现类似这样:如何在winforms mvp模式中实现usercontrol?. 另外,检查这个问题:被动视图和显示逻辑
方法#1
我的Title
财产View
如下所示:
private string title;
public string Title {
get { return title; }
set { title = value; titleTextBox.Text = presenter.Format(title); }
}
我觉得这个实现增加了不必要的耦合。例如,如果我更改Presenter
'Format
方法,那么我将必须遍历所有View
s 并适当地更改 call 语句。
方法#2
我的Title
财产View
如下所示:
public string Title {
get { return presenter.Title; }
set { presenter.Title = value; }
}
我的Title
财产Presenter
如下所示:
private string title;
public string Title {
get { return title; }
set { _view.SetTitle(this.Format(value); }
}
现在我必须在接口和实现中添加SetTitle
方法:View
View
public void SetTitle(string title) {
titleTextBox.Text = title;
}
因此,通过这种方法,我得到了这种丑陋SetTitle
的类似 Java 的方法。
方法#3
而不是调用在中SetTitle
创建一个新属性并设置它。这个前缀仍然很难看。RealTitle
View
Real
你的方法
你能想出更好的方法吗?
用例
UserControl
应该这样使用:
var c = new FancyTextBox();
c.Format = "000";
c.Text = "42";
Controls.Add(c);
此代码段应显示"042"
在UserControl
.
大图
Form FancyTextBoxView FancyTextBoxPresenter
| | |
| ftb.Text = "42" | |
|-------------------->| |
| | |
| | A |
| |----------------------------->|
| | |
| | B |
| |<-----------------------------|
A 和 B 动作是什么?我希望格式化的文本出现在 UI 中。格式代码在Presenter
. View
有一个将titleTextBox
在 UI 中保存文本的。