如何/何时在OOP中编写可重用的方法

时间:2011-12-23 03:13:05

标签: c# oop code-reuse

我经常发现自己处于这样一种情况:我在一个方法中多次重复两行,三行代码,然后考虑是否应该将它放在一个单独的方法中以避免代码重复。但是当我将这些线移出方法时,我发现刚创建的方法不可重复使用,只使用一次或需要重载才能用于另一种方法。

我的问题是我们应该寻找什么样的模式,表明我们应该创建一个新的方法。感谢您的回复。

6 个答案:

答案 0 :(得分:4)

不要在一个方法/类中放置太多功能。尝试关注single responsibility principle。熟悉这种方法需要一些时间。但是一旦你达到那个水平,你会注意到它完全由它自己完成。在编码之前,试着问问自己,你的概念包含哪些功能单元。

例如,您要开发一个可以索引pdf文件内容的应用程序。这只是虚构的,但初看起来,我至少可以识别出三个组成部分:

  1. PdfParser - 这为您提供了pdf的内容
  2. 索引器 - 从解析器获取输入并计算有意义的单词
  3. 存储库 - 它是持久性的;这可以是通用的;所以只要说repository.Get<IndexData>(filename)或其他什么
  4. 您还应该尝试对接口进行编码。特别是当涉及某种UI时。例如,您正在使用WinForms开发聊天客户端。如果您遵循MVC / MVVM - 模式,您可以轻松(即,比编码Form对象更容易)将原始逻辑与WPF版本的客户端一起使用。

答案 1 :(得分:3)

我首先要阅读关于DRY原则(不要重复自己),希望它会为你的问题提供一个很好的答案,这是一个所有开发人员应该问自己的问题,很好的问题!!

请参阅Don't repeat yourself

我想把它留在DRY,因为它是一个如此简单但功能强大的概念,需要一些阅读和大量练习来获得良好的补充。但是,让我试着直接回答你的问题(恕我直言),

如果您无法为您的方法提供一个反映您的方法正在做什么的名称,请将其分解为具有意义的部分。

您会发现自己轻松地干掉代码,可重用的部分会出现,您可能永远不会发现自己重复代码。

我会这样做,即使它意味着只有几行代码的方法。

遵循此惯例将为您的代码赋予意义,使其可读可预测,并且肯定更多可重复使用

答案 2 :(得分:2)

如果您打算移动到另一个方法的代码行执行一组特定的操作(如读取文件,计算值等),那么最好重构为另一个辅助方法。同样,只有在代码中的多个位置调用辅助方法或调用方法太长时才这样做(too long的定义取决于开发人员)。

类似问题

答案 3 :(得分:1)

作为一般规则,始终将这些情况视为功能实体。如果一段代码在功能上执行任务(复杂的字符串转换,解析等),您应该编写可重用的方法。 如果该功能特定于某种类型,则写一个extension method

答案 4 :(得分:1)

您可以在类型为Action<>Func<>的函数中创建局部变量,并为其分配代码段。然后你可以在函数内的任何地方使用它,而不会用太多的辅助函数来污染你的类。

答案 5 :(得分:0)

如果您构建了一个可重用的方法,但不在多个地方使用它,那么您的方法的可重用性并未真正得到验证。 在有意义的时候提取方法,并在实际有机会重用代码时重新设计这些方法以实现可重用性。