我有一个相当大的CRUD winform应用程序,它设置为显示tabcontrols中嵌入的表单。我想拥有Person的对象,(有)a Enrollment,(有a)计划在与表单交互时保存和跟踪信息。我该如何做到这一点?我发现在我的 Program.cs 中声明Person对象的建议是这样的 - >
internal static class Program
{
public static CurrentPerson _CurrentPerson;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmWWCShell());
}
}
然后在 Search.cs - &gt;
Program._CurrentPerson = new CurrentPerson
{
PersonID = Convert.ToInt32(pID),
LastName = lName,
FirstName = fName,
SocialSn = sSN,
MiddleName = mName,
BirthDate = Convert.ToDateTime(bDate)
};
这是最好的方法吗?在“搜索”页面上进行此选择后,仍有大量数据需要从数据库中填入。如何在每个表单上声明对象并以某种方式传递它?当物体进展时,物体会慢慢“建立”。首先,他们按名称搜索为某人选择,并选择他们将与谁合作。然后他们可以在那里工作。选择注册后,他们将能够与计划进行互动。
我会很感激这里的任何指导,因为这个范围让我没有经验的头脑旋转......
答案 0 :(得分:2)
您需要分离数据,逻辑和GUI。
查看Model-View-Controller pattern。
如果您认为在您的情况下它过于复杂,您可能只需创建一个中央控制器类来保存中央数据。在每个表单构造函数中传递此对象,您就完成了。
答案 1 :(得分:0)
a)单身人士
从代码重用的角度来看,全局静态属性并不是一个好主意。如果您计划从您的代码中访问全局静态属性,那么您的代码将与此特定应用程序紧密相关。
如果您的代码中始终只有Person
的单个实例,那么您可以将此Singleton放在Person
类中,但肯定不在您的Program
类中。但请注意,Singleton类的使用通常仅限于日志记录服务或一些非常普遍的东西,它肯定永远不会改变。
b)相同的对象引用
在这种情况下,您不需要单例实例,而是将相同引用传递给您的数据对象(Person,或其他任何内容)到每个表单正在访问它。如果您的表单是数据的一部分,那么您只能将该部分数据传递给表单,最好通过最简单的接口。
更改一个表单中的数据可能需要更新其他表单。这就是模型 - 视图 - 控制器和类似模式可以帮助您实现的目标 - 通知视图数据已在其他地方更改。
例如,通过在Person
类中实现IPropertyNameChanged接口,只要属性发生更改,您就可以通知任何感兴趣的人(任何表单)。请查看此示例:http://msdn.microsoft.com/en-us/library/ms229614.aspx。通过在每个表单中附加事件处理程序到该事件,您将通知所有这些事件他们需要被无效。
答案 2 :(得分:0)
看看Mediator设计模式。