C# 分离数百个事件处理程序

C# 分离数百个事件处理程序,c#,C#,这是我多次遇到的代码管理问题。假设我有一个winforms应用程序,其中有很多内容——数百个控件的内容,其中大多数都有附加的事件处理程序和方法。在寻找如何分离如此大的文件的建议时,我想到的两个大建议是区域和分部类。然而,几乎所有的顶级答案都对这两个问题进行了谴责 所以我想知道,分离出这样的东西的最佳实践是什么?将它们划分为新类是没有意义的,因为它们只是控制事件处理程序。区域很好,但是代码太多仍然会非常混乱。我有点不知所措,我不知道如何在这里应用SRP,我看到的任何建议似乎都被认为是不好的做法。正

这是我多次遇到的代码管理问题。假设我有一个winforms应用程序,其中有很多内容——数百个控件的内容,其中大多数都有附加的事件处理程序和方法。在寻找如何分离如此大的文件的建议时,我想到的两个大建议是区域和分部类。然而,几乎所有的顶级答案都对这两个问题进行了谴责


所以我想知道,分离出这样的东西的最佳实践是什么?将它们划分为新类是没有意义的,因为它们只是控制事件处理程序。区域很好,但是代码太多仍然会非常混乱。我有点不知所措,我不知道如何在这里应用SRP,我看到的任何建议似乎都被认为是不好的做法。

正确的方法是将表单拆分为用户控件

分部类用于将生成的代码与用户代码分开,而区域只是布局(在我看来是无用的,但这只是一种观点)

在用户控件中拆分窗口可促进适当的封装和重用


根据项目的不同,清理它可能花费太多,但拆分几个简单的可能有助于提高可读性,并可能在调试时节省一些时间。此外,当添加新的控件和逻辑时,考虑添加用户控件并启动以这种方式进行拆分的过程。成本将在更长的时间内分摊,并且只支付您实际使用且需要可读的部分

部分类有什么问题?我以前使用过它们来保持代码的独立性,在我的例子中,它工作得很好。“ClassName\u EventHandlers.cs”文件似乎是一种很好的方法,可以使代码保持独立,并且很容易在一个位置找到所有的事件处理程序。将事件处理程序移动到另一个分部类。@HansPassant:在visual studio 2015中,设计器的“转到定义”右键单击选项主要在分部类中查找事件处理程序,而不更新项目文件,与2012年之前的“导航到处理程序”不同,这是一种方式。如果回答是表单没有自然地拆分为控件,那么设计就有点错误,因为您应该能够重用相同的处理程序。这是一个轻率的回答,忽略了现实世界中的成本/收益考虑。在没有更多工作的情况下,任何控制装置都不可能真正可重复使用,所以这提倡大手术,唯一的好处是“适当的封装”。它还忽略了额外的复杂性,因为表单需要各个控件以以前的新方式相互交互。我已经研究了用户控件,但遇到了一些进一步的问题。让一个用户控件与另一个用户控件交互的最佳方式是什么?e、 g.如果usercontrol2需要更新usercontrol1中的值,那么获取usercontrol1到usercontrol2的引用的最佳方法是什么?当您创建usercontrol2时,是否只需传递对主窗体的引用,然后访问包含usercontrol1的公共变量?好吧,因为我们看不到代码(谢天谢地),我们只能做出假设。但是有这么多的控制,我们至少可以希望,实际上有一些团队在某种程度上独立地合作;无论是否重用,这些组确实可以生成良好的UCs。我经常使用的另一种模式是封装某些函数并可以立即重用的控制器类。不是为控制器的所有客户机编码所有处理程序,而是在控制器类中编码一组处理程序。当然,这都是猜测。。