方法c#中的方法中的方法

时间:2013-08-26 09:24:29

标签: c# visual-studio methods

让很多方法相互引用是不是很糟糕,如下例所示?

public void MainMethod()
{
   GetProducts();  
}

public void GetProducts()
{
   var _products = new Products();
   var productlist = _products.GetProductList;
   GetExcelFile(productlist);
}

public void GetExcelFile(List<product> productlist)
{
   var _getExcelFile = new GetExcelFile();
   var excelfile = _getExcelFile.GetExcelFileFromProductList(productlist);

   //create excel file and so on...
}

所以我正在为每一个小动作创建一个新方法。从该方法中的GetProductsMainMethod操作调用all同样容易,但我认为这不是创建可重用代码的方法。

以下告诉我方法中的语句不应超过7个:

Only 7 statements in a method

所以使用最少量代码的方法的优点:

  • 代码可重复使用
  • 每个任务都可以得到自己的方法

使用少量代码的方法的缺点:

  • 就像意大利面条代码
  • 你得到:参考推荐等

我的问题:

我的方法应该更大,还是应该继续创建小方法,哪些方法做得很少,并参考很多其他方法?

4 个答案:

答案 0 :(得分:3)

指南是对的。方法应该很小,你做的正确的事情不仅是给每个操作提供自己的方法,还有一个定义的名称。如果这些方法具有明确的名称,一个责任和明确的意图(并且不要忘记将命令与查询分开),那么您的代码将不会是spagetti。最重要的是,尝试订购类似新闻文章的方法:文件顶部最重要的方法,底部最详细的方法。这样,其他任何人都可以开始阅读,并在他们感到无聊(或有足够的信息)时停止阅读。

我可以建议你获得Robert Martin's Clean Code的副本。业内没有人比他更清楚地描述这一点。

答案 1 :(得分:2)

该指南通常是一个很好的指南,不是为了重复使用,而是为了您的代码的可读性。

但是,你的榜样并不好。你正在做的是基本上创建一个很长的方法列表,当你觉得它太长时,每个方法停止,并调用另一个方法来执行其余的操作。

我会遵循更多这种方法,其中阅读main方法会告诉您代码需要按步骤分析的“故事”,每个步骤的细节都是较小的方法。

public void MainMethod()
{
   var productlist=GetProducts();  
   string excelfile=GetExcelFile(productlist);

   // do something in the excel file
}

public List<product> GetProducts()
{
   var _products = new Products();
   return _products.GetProductList;
}

public string GetExcelFile(List<product> productlist)
{
   var _getExcelFile = new GetExcelFile();
   var excelfile = _getExcelFile.GetExcelFileFromProductList(productlist);

   return excelfile; 
}

答案 2 :(得分:0)

我真的不同意'方法中的7个陈述'。一个方法可以有几十个语句,只要该方法执行单个函数并且特定逻辑只能在一个地方使用,我真的没有看到将它切割成部分的重点仅仅是因为某些知识分子这么说,它应根据有意义分开。

如果有意义的话,重复使用代码是好的,但是当你在不久的将来没有计划重新使用它时,我认为你不应该让所有地方都可以重复使用。它不必要地增加了开发时间,它经常使得软件更复杂,更难以解释然后它需要,并且(至少在我的公司中)大多数代码永远不会被重用,即使它仍然是需要修改新产品。只有我们代码库中最通用的部分才能在多个应用程序中使用而无需对每个产品进行修改。

我认为没关系。

答案 3 :(得分:-1)

这主要是基于意见的问题,但我会告诉你一件事:

如果您不打算从多个地方使用某种方法,最好不要为此创建方法。

为了清晰起见,你可以使用区域,你可能不需要比整页更大的方法,但不是每2-3个命令都应该得到一个方法。