【发布时间】:2017-02-22 08:23:16
【问题描述】:
我有多个相互交互的winforms。一个表单允许用户输入一组属性,然后验证它们并单击按钮移动到下一个表单。用户可以随时选择退出并转到之前的表单。
我有一个记录基本属性值的业务对象类。
现在,我最初使用简单、朴素的参数在表单之间交换值。例如,假设 Form1 和 Form2。在按钮上单击“下一步”Form1 被隐藏并显示 Form2:-
// event of button click "Next" on Form1.cs //
private void btnNext_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2 (myTxtBoxValue.Text);
form2.Show();
this.Hide();
}
// constructor in Form2.cs //
public Form2(string myTxtBoxValue)
{
InitializeComponent();
TransactionBO trans = new TransactionBO();
trans.myValue = myTxtBoxValue; // <-- this gets the value accurately.
}
// my Business Object class is called TransactionBO.cs //
class TransactionBO
{
public string myValue {get;set;}
}
但是,有人建议我这样做的更好方法是使用单例。原因是“最好不要将 form2 绑定到 form1,创建依赖项可能会降低未来的灵活性/可扩展性”。
有人可以解释一下我的原因吗?以及如何使用单例(我知道单例的基本原理是什么,我必须创建一个单独的单例类还是可以使用我的 TransactionBO.cs 类在表单之间传递值)?
【问题讨论】:
-
你描述的看起来像向导控制。你在实施那种东西吗?
-
在一个表单中使用多个面板不是更好吗?
-
您可以使用Wizard-like 控件。您可以拥有在向导的不同页面之间使用的单个模型对象。每个向导页面中托管的控件(或用户控件)实际上是您希望在每个步骤中用于模型的不同视图。
-
你的同事落后了大约 10 年。单例模式是 now considered an anti-pattern 并且已经被废弃,部分原因是它给单元测试带来了巨大的问题。
-
@OP,this answer 中描述了许多技术。你的并不糟糕;它不会是我的第一选择,但如果它已经基本完成,我不会费心重写它。