C# 如何在VisualStudio中将业务逻辑从windows窗体分离到类

C# 如何在VisualStudio中将业务逻辑从windows窗体分离到类,c#,visual-studio-2015,C#,Visual Studio 2015,我在C#和visualstudio中工作,并制作了一个Windows窗体(MainForm)-它有大量的按钮,可以通过许多进程工作 目前-它实际上工作得很好,我只是想“让它工作”。但是,我所有的代码都在MainForm.cs文件中,我认为这是一种不好的做法。我在那里有很多方法,我觉得最好放在适当的类中 通过阅读,我发现buttonClick事件应该存在于Form类中,但随后应该将剩余的工作交给存在按钮的类(即,如果按钮说“备份图片”,我应该有一个带有“备份”方法的图片类) 在VisualStud

我在C#和visualstudio中工作,并制作了一个Windows窗体(
MainForm
)-它有大量的按钮,可以通过许多进程工作

目前-它实际上工作得很好,我只是想“让它工作”。但是,我所有的代码都在
MainForm.cs
文件中,我认为这是一种不好的做法。我在那里有很多方法,我觉得最好放在适当的类中

通过阅读,我发现
buttonClick
事件应该存在于Form类中,但随后应该将剩余的工作交给存在按钮的类(即,如果按钮说“备份图片”,我应该有一个带有“备份”方法的图片类)

在VisualStudio中有没有一个好的方法来实现这一点


有没有帮助者可以使用现有的方法并将它们放入自己的类中?

我在之前的项目中遇到了这个问题,下面是如何解决这个问题的

  • 如果需要调用COM API,则需要添加一些DLL,这些DLL也是WinForms项目的一部分,否则最好从WinForms项目中调用它们

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

  • 如果在类库中引用任何不同的版本,在项目中引用任何不同的版本,则会中断项目


    因此,最好取出所有内容并保留UI、COM调用,所有内容都将以这种方式正常工作。

    您认为
    事件
    事件处理程序
    应该存在于
    表单
    中,而所有数据操作都应该在
    处理程序
    调用的
    类中处理。不幸的是,没有任何工具可以神奇地将这些内容拆分出来,因为没有真正的方法来自动化需要类的内容和最好的内联内容

    您应该遍历代码并首先建立所需的类。继续,用“添加新内容”创建
    New
    Class
    文件,并将其删除。他们根本不需要任何代码。现在,转到表单中的
    事件
    处理程序,确定应该在函数中的内容组。举个(非常便宜的)例子:

    变成:

    //new code
    public void myEventHandler(object sender, EventArgs e)
    {      
       LabelResult.Text = Order.Preference(myDrinkOfChoice.Text, myFoodOfChoice.Text);
    }
    
    即使创建了一个“Order”类文件,您也会在“Order.Preference”下看到错误的红色波形。您需要将
    排序
    放入一个类中,但不需要删除
    首选项
    ,因为VS可以为您这样做。单击鼠标悬停在错误上时出现的错误解决动态菜单按钮,并告诉VS将代码存根到您的
    订单
    类中。再次打开订单时,您将看到:

    public static class Order
    {
       public static string Preference(string myDrink, string myFood)
       {
          throw new NotImplementedException();
       }
    }
    
    从这里开始,您只需粘贴
    表单中的代码
    ,然后返回值

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

    在不牺牲可靠性的情况下,让VS删除您需要的内容可能是完成您正试图完成的工作的最快方式。如果您提前创建了类文件,您可以在
    表单中通过
    事件
    处理程序并让VS为您清除方法时,只需编写方法名称和签名

    这是一个怎样的VisualStudio问题?请仅在有关工具本身的问题上使用Visual Studio标记,而不是在一般编程问题上。在这些情况下,我总是创建我的类,并手动将代码从UI复制/粘贴/调整到新类中。我真的无法想象Visual Studio能够提供什么样的工具来让它变得更简单——对我来说,做这些事情通常只是一件单调乏味的琐事。看看,它提供了高级重构实用程序,例如将一个方法移动到它自己的文件中。重组->重构->移动。很棒的建议@GeorgPatscheider!谢谢乔,我也很感谢你的意见。我不确定“编写代码使其工作”然后将逻辑四处移动有多普遍。我不熟悉C#和visual studio-主要是PHP框架-因此windows窗体是一个学习曲线-我很欣赏反馈~关于使用红色曲线帮助快速创建类中方法的好主意。非常感谢。
     public static class Order
        {
           public static string Preference(string myDrink, string myFood)
           {
             return "I like " + myDrink + " & " + myFood";
           }
        }