我经常发现自己处于这样一种情况:我在一个方法中多次重复两行,三行代码,然后考虑是否应该将它放在一个单独的方法中以避免代码重复。但是当我将这些线移出方法时,我发现刚创建的方法不可重复使用,只使用一次或需要重载才能用于另一种方法。
我的问题是我们应该寻找什么样的模式,表明我们应该创建一个新的方法。感谢您的回复。
答案 0 :(得分:4)
不要在一个方法/类中放置太多功能。尝试关注single responsibility principle。熟悉这种方法需要一些时间。但是一旦你达到那个水平,你会注意到它完全由它自己完成。在编码之前,试着问问自己,你的概念包含哪些功能单元。
例如,您要开发一个可以索引pdf文件内容的应用程序。这只是虚构的,但初看起来,我至少可以识别出三个组成部分:
答案 1 :(得分:3)
我首先要阅读关于DRY原则(不要重复自己),希望它会为你的问题提供一个很好的答案,这是一个所有开发人员应该问自己的问题,很好的问题!!
我想把它留在DRY,因为它是一个如此简单但功能强大的概念,需要一些阅读和大量练习来获得良好的补充。但是,让我试着直接回答你的问题(恕我直言),
如果您无法为您的方法提供一个反映您的方法正在做什么的名称,请将其分解为具有意义的部分。
您会发现自己轻松地干掉代码,可重用的部分会出现,您可能永远不会发现自己重复代码。
我会这样做,即使它意味着只有几行代码的方法。
遵循此惯例将为您的代码赋予意义,使其可读和可预测,并且肯定更多可重复使用
答案 2 :(得分:2)
如果您打算移动到另一个方法的代码行执行一组特定的操作(如读取文件,计算值等),那么最好重构为另一个辅助方法。同样,只有在代码中的多个位置调用辅助方法或调用方法太长时才这样做(too long
的定义取决于开发人员)。
类似问题
答案 3 :(得分:1)
作为一般规则,始终将这些情况视为功能实体。如果一段代码在功能上执行任务(复杂的字符串转换,解析等),您应该编写可重用的方法。 如果该功能特定于某种类型,则写一个extension method。
答案 4 :(得分:1)
您可以在类型为Action<>
或Func<>
的函数中创建局部变量,并为其分配代码段。然后你可以在函数内的任何地方使用它,而不会用太多的辅助函数来污染你的类。
答案 5 :(得分:0)
如果您构建了一个可重用的方法,但不在多个地方使用它,那么您的方法的可重用性并未真正得到验证。 在有意义的时候提取方法,并在实际有机会重用代码时重新设计这些方法以实现可重用性。