2

有很多方法相互引用是不是很糟糕,比如下面的例子?

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...
}

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

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

一个方法中只有 7 个语句

因此,使用最少代码的方法的优势:

  • 代码可重用
  • 每个任务都可以有自己的方法

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

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

我的问题:

我的方法应该更大,还是应该继续创建小方法,做的很少并引用很多其他方法?

4

4 回答 4

3

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

我可以建议您获取一份Robert Martin 的 Clean Code。业内没有人比他更清楚地描述了这一点。

于 2013-08-26T09:29:51.373 回答
2

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

但是,您的示例不是一个好示例。您所做的基本上是创建一长串方法,当您觉得它太长时,每个方法都会停止并调用另一个方法来执行其余操作。

我会更多地遵循这种方法,阅读主要方法会告诉您代码需要逐步讲述的“故事”,并且每个步骤的细节都在较小的方法中。

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; 
}
于 2013-08-26T09:42:20.343 回答
0

我不太同意“方法中的 7 条语句”。一个方法可以有几十条语句,只要该方法执行一个功能,具体逻辑只会用在一个地方,我真的不明白仅仅因为某些Guyideline这么说就把它分成几部分,它应该基于什么是有意义的分开。

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

我认为这很好。

于 2013-08-26T09:44:25.903 回答
-1

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

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

为了清楚起见,您可以使用区域,并且您可能不想要一个大于整页的方法,但并非每 2-3 个命令都应该获得一个方法。

于 2013-08-26T09:29:27.450 回答