C# NET中的编码风格:是否重构为新方法? 正如您所知道的,在.NET代码后面的样式中,我们已经使用了很多函数来适应那些单击函数、选择索引更改函数等。在我们的团队中,有一些开发人员在.NET函数的中间函数,例如: public void Button_Click(object sender, EventArgs e) { some logic here.. some logic there.. DoSomething(); DoSomethingThere(); another logic here.. DoOtherSomething(); } private void DoSomething() { } private void DoSomethingThere() { } private void DoOtherSomething() { } public void DropDown_SelectedIndexChanged() { } public void OtherButton_Click() { }

C# NET中的编码风格:是否重构为新方法? 正如您所知道的,在.NET代码后面的样式中,我们已经使用了很多函数来适应那些单击函数、选择索引更改函数等。在我们的团队中,有一些开发人员在.NET函数的中间函数,例如: public void Button_Click(object sender, EventArgs e) { some logic here.. some logic there.. DoSomething(); DoSomethingThere(); another logic here.. DoOtherSomething(); } private void DoSomething() { } private void DoSomethingThere() { } private void DoOtherSomething() { } public void DropDown_SelectedIndexChanged() { } public void OtherButton_Click() { },c#,.net,coding-style,C#,.net,Coding Style,上面列出的函数只在该函数中使用一次,而不在页面的任何其他地方使用,也不从解决方案的其他部分调用 他们说,通过将代码分组并将其提取到附加的子函数中,可以使代码更加整洁。 我可以理解,如果子函数在代码中反复使用,但是如果它只使用一次,那么我认为将它们提取到子函数中并不是一个好主意, 随着代码越来越大,当您查看页面试图理解逻辑或逐行浏览调试时,它会让您感到困惑,因为它会从主函数跳到子函数,然后再跳到主函数,再跳到子函数 我知道在编写旧的ASP或ColdFusion样式时,这种方法分组更好,但我不确定这

上面列出的函数只在该函数中使用一次,而不在页面的任何其他地方使用,也不从解决方案的其他部分调用

他们说,通过将代码分组并将其提取到附加的子函数中,可以使代码更加整洁。 我可以理解,如果子函数在代码中反复使用,但是如果它只使用一次,那么我认为将它们提取到子函数中并不是一个好主意, 随着代码越来越大,当您查看页面试图理解逻辑或逐行浏览调试时,它会让您感到困惑,因为它会从主函数跳到子函数,然后再跳到主函数,再跳到子函数

我知道在编写旧的ASP或ColdFusion样式时,这种方法分组更好,但我不确定这种样式是否适合.NET

问题是:在开发.NET时,哪一个更好?是将类似的逻辑分组到子方法中更好(尽管它们只使用一次),还是将它们放在主函数中,并在逻辑的开头添加//说明更好

希望我的问题足够清楚

谢谢

更新: 感谢大家迄今为止的回答和投入

只是我们一直把所有的逻辑和东西放在一个函数中(我们以前只有2-3个开发人员),突然我们成长为一个有7-8个开发人员的团队,每个人都有自己的风格


我认为最好开始制定指导方针,这就是为什么我觉得有必要提出这个问题。

我认为引入函数更好。真正长的方法在可读性和调试方面有自己的问题。尤指嵌套太深时。另外,当你单步执行代码时,一旦你确定一个函数是正确的,你就可以单步执行它,而不是单步执行非常精细的代码行

也就是说,重构成不同的方法可能有很多原因。正如您所提到的,重用可能是最引人注目的。还有一种观点认为应该将大型方法分解为较小的块,即一个方法只能做一件事。见鲍勃叔叔的理论


将一个方法分解成更小的块的另一个原因是为了单元测试和/或实现代码契约。

每个人都有自己的编码风格,只要它不是太糟糕,你就应该顺其自然,学会接受它。在一个团队中,没有什么比代码纳粹更糟糕的了,而且可能有团队成员不喜欢你的风格

虽然你个人不喜欢它,这确实意味着页面中还有一些功能,但这种方法的真正危害在哪里?我个人不会这样做,但只要代码正常工作,并且不是真正的混乱或混乱,那么它就不是世界末日。

阅读此文,如果你有时间,可以看看这本书:


Juval Lowy出版的.NET组件编程:O'Reilly。有一整节都在讨论C#编码标准,并给出了很好的示例。

将这些例程分解为许多较小的方法至少有两个好处

(1) 它们可以更容易地作为谨慎的能力进行测试。。。更重要的是

(2) 编译器优化方法内联一旦方法达到一定的复杂度和/或大小,就无法工作。。。仅出于这个原因,我会选择许多较小的方法


(3) 当你把东西分解成小夹头的时候,你可能会发现你可以让一些程序变得静态。这意味着每个类实例在运行时都会更小,因此在GC中花费的时间也会更少。这意味着一些例程的性能也会更高。

这都是关于可读性和可维护性的

NET Framework的编译器或运行时并不关心要调用的一个长方法或多个小方法(好吧,可能会有一些最小的性能差异,但这不是重点)

如果你找到了一个好名字,让代码在子方法中进行重构,你应该这样做,并且省去注释或解释代码的作用。因为一个好的方法名应该指出这里发生了什么


我更喜欢将长方法重构成更小的方法,只是为了可读性。即使它们只使用一次。

就我个人而言,在编写这样的代码时,我可能会选择某种模型-视图-控制器(或类似的)模式

然而,正如另一张海报所提到的,这肯定是个人偏好和风格的问题


将您的代码分解为小的工作单元肯定会使您的代码更容易进行单元测试和调试。根据“DoSomething”函数的功能,您甚至可能希望将它们抽象为逻辑层(通常在.Net中作为类库分离)——例如:数据访问、应用程序服务等,我不认为在GUI代码中加入逻辑和方法是好的,这只能作为非常简单的项目的借口。在GUI中放置逻辑并不是一个好的实践,因为您/您的同事需要在稍后的某个时间维护该代码

我建议您始终保持正确的代码结构,以便您和其他人能够轻松地进行更改、扩展项目等

我建议您为logics+方法创建新类

你的项目
  • YourGUICode.cs
  • Task1Processor.cs
  • Task2Processor.cs