English 中文(简体)
C # 中以几个最小的分隔法分割到 [封闭]
原标题:Splitting method to several smallest in C# [closed]
  • 时间:2012-05-23 13:32:52
  •  标签:
  • c#
  • .net

是否有一种良好做法,将复杂方法的部分功能划分为几个较小的方法,仅就良好的代码可读性而言(但也许为调用方法支付一些性能)?或者这是某种“坏风格”?

最佳回答

最基本的规则是,你的方法应该只做一件事。如果你察觉到它正在做许多不同的事情,那么你显然可以重新思考机会。

如果您到达了您的方法有单一责任但大小又过长的关卡, 请尝试将“ 帮助者” 功能提取到分离的方法中。 您甚至可以检测到可以被分隔的类的代码 。

开发TDD是避免这类问题的好方法,因为它真正有助于为测试目的将关注问题明确分开,避免在单一方法上出现一堆代码。 如果你不写简明的方法,就很难正确测试它们。

问题回答

如果您想重用代码( http://en.wikipedia.org/wiki/Don%27t_repeat_ourself" rel=“nofollow”>DRY 原则), 您应该考虑重新设定。 方法内容根据功能分成不同的小模块, 以便可以重新使用。 例如 : 如果您有方法保存客户注册细节, 并为他创建新命令 。 您也许可以检查许多方法, 如 CheckeruserExist , < code> < saveuser 和 < code> > saveOrder 。 您应该能够在必要时在代码的其他领域重新使用此功能。 将其分割成模块使您的代码更容易读 。

Unclebob (Robert C. Martin) 认为方法不应大于4-5行代码,他的座右铭是“Extract until you drop"。从个人角度看,我认为这是一个非常好的做法。

视觉工作室允许您通过按 CTRL+R, M 来提取一种方法 。

除了Claudio的回答之外,还有一些SMELLS, 如果被检测到, 这意味着你必须重构和分割你的代码。

1 - 不 < a href=>""http://www.artima.com/intv/dry.html" rel="不跟随 nofollow noreferrer" >DRY 代码:如果你发现自己复制/粘贴一些线到不止一个地方,这是一个臭味,需要放置在一个中心,并尽可能多地调用。

2. 有数百行线的方法:任何好的方法都不应超过50行代码,也许或多或少于这个数字,但请放心,这种346行的方法不是一件好事。

3 - 参数太多:你的方法中参数清单很长,使得可读性和代码质量更差。

4 代码入侵:使用许多从另一类中阻塞的方法,应该存在于这一类中。

希望这有帮助。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签