如何在 Visual Studio 中将业务逻辑与类从窗口窗体分离



我在C#和Visual Studio中工作,并制作了一个Windows表单(MainForm) - 它有很多按钮可以通过许多过程工作。

目前 - 它实际上工作正常,我只是想"让它工作"。但是,我的所有代码都位于MainForm.cs文件中,我认为这是不好的做法。我有很多方法,我觉得放在适当的类中会更好。

我通过阅读了解到,buttonClick事件应该存在于 Form 类中,但随后应该将其余工作交给存在按钮的类(即,如果按钮说"备份图片",我应该有一个带有"备份"方法的 Pictures 类)。

在视觉工作室中,有没有一个好的方法可以做到这一点?

是否有任何帮助程序可以采用现有方法并将它们放入自己的类中?

您是正确的,EventsEvent Handlers应该存在于Form中,而所有数据操作都应以Handler调用classes处理。 不幸的是,没有工具可以神奇地为您拆分这些内容,因为没有真正的方法可以自动化需要类的内容以及最好保留在内联的内容。

您应该滚动代码并首先建立您需要的类。 继续并通过使用"添加新"创建NewClass文件来存根它们。 他们根本不需要任何代码。现在,转到窗体中的event处理程序,并确定应该在函数中的事物组。举一个(非常便宜的)例子:

//old code
public void myEventHandler(object sender, EventArgs e)
{
string myDrink = myDrinkOfChoice.Text; //these are textbox controls
string myFood = myFoodOfChoice.Text;
LabelResult.Text = "I like " + myDrink + " & " + myFood";
}

成为:

//new code
public void myEventHandler(object sender, EventArgs e)
{      
LabelResult.Text = Order.Preference(myDrinkOfChoice.Text, myFoodOfChoice.Text);
}

你会在Order.Preference下得到一个错误的红色波浪线,即使你已经制作了一个"Order"类文件。您需要将Order变成一个类,但您不需要存根Preference,因为 VS 可以为您执行此操作。单击将鼠标悬停在错误上时出现的错误解决动态菜单按钮,并告诉 VS 在Order类中存根代码。再次打开Order时,您会看到:

public static class Order
{
public static string Preference(string myDrink, string myFood)
{
throw new NotImplementedException();
}
}

从这里开始,您所要做的就是粘贴Form中的代码并返回值。

public static class Order
{
public static string Preference(string myDrink, string myFood)
{
return "I like " + myDrink + " & " + myFood";
}
}

让 VS 存根出您需要的内容可能是执行您正在尝试执行的操作的最快方法,同时又不牺牲可靠性。如果提前创建类文件,则只需在浏览Form中的event处理程序时组成方法名称和签名,并让 VS 为您存根方法。

我在上一个项目中早些时候遇到了这个问题,这是解决这个问题的方法。

  1. 如果您需要调用COM API,则需要添加一些DLL,该DLL也是WinForms项目的一部分,否则最好从WinForms项目调用它们。

  2. 您可以删除所有内容,但不能删除与UI部分相关的任何内容。如果需要再次执行此操作,则需要将这些 dll 添加到类库中。

如果在类库中引用任何不同的版本,而在项目中引用不同的版本,则会破坏该项目。

所以最好把所有东西都拿出来,留下UI,COM调用,一切都会以这种方式正常工作。

最新更新