反模式,重构c#代码示例

本文关键字:代码 重构 模式 | 更新日期: 2023-09-27 18:10:32

我写了代码,但它看起来不是很优雅和直观。我现在试着重构它。您在我的代码中看到任何反模式了吗?

我正在处理图像。我从文件夹中得到图像,处理后删除。

 Console.WriteLine("Press ESC to exit");
 bool isEmptyFolderFlagSet = false;
 while (true)
 {
     if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape)
     {
         appExited(null, EventArgs.Empty);
         return;
     }    
     List<string> images = new List<string>(System.Linq.Enumerable.Concat
         (System.IO.Directory.GetFiles(sourcePath, "*.pdf"), System.IO.Directory.GetFiles(sourcePath, "*.tif")));
     if (images.Count == 0 && !isEmptyFolderFlagSet)
     {
         Console.WriteLine("Waiting for image...");
         isEmptyFolderFlagSet = true;
     }
     else
     {
         isEmptyFolderFlagSet = false;
         foreach (string imagePath in images)
         {
             try
             {
                 processing.ProcessingFile(imagePath);
                 System.IO.File.Delete(imagePath);
             }
             catch (System.IO.FileNotFoundException ex)
             {
                 Console.WriteLine(ex.Message);
             }
         }
     }
     Thread.Sleep(500);
 }

反模式,重构c#代码示例

  1. 在'while'子句中放置一个条件

    Console.WriteLine("Press ESC to exit");
    while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape))
    {      
       //Code here
    }     
    
  2. 如果有很多文件?你应该使用EnumerateFiles而不是GetFiles(会更快)

  3. 你可以使用System.IO.File.Exits(filename)方法,而不是昂贵的try. catch只捕获FileNotFound。

  4. 如前所述,带回调函数的Timer(可能是匿名的)会更合适。