重构这个嵌套在try/catch中的嵌套IF函数

3 refactoring

我有一个需要重构的混乱功能,它有太多嵌套的IF,它让我感到紧张只是看看它!

请忽略函数正在做什么,我更关心结构/流程以及它如何被重构,因此它具有较少的嵌套IF语句

基本流程如下:

public static void HandleUploadedFile(string filename)
{

      try
      {
        if(IsValidFileFormat(filename)
        {

            int folderID = GetFolderIDFromFilename(filename);

            if(folderID > 0)
            {

                if(HasNoViruses(filename)
                {

                    if(VerifyFileSize(filename)
                    {

                        // file is OK
                        MoveToSafeFolder(filename);

                    }
                    else
                    {
                        DeleteFile(filename);
                    }


                }
                else
                {
                    DeleteFile(filename);
                }


            }
            else
            {
                DeleteFile(filename);
            }



        }
        else
        {
            DeleteFile(filename);
        }
      }
      catch (Exception ex)
      {

      }
      finally
      {
        // do some things
      }


}
Run Code Online (Sandbox Code Playgroud)

And*_*nan 10

我很想去:

    private static bool CanMoveToSafeFolder(string filename)
    {
        return IsValidFileFormat(filename)
            && GetFolderIDFromFilename(filename) > 0
            && HasNoViruses(filename)
            && VerifyFileSize(filename);
    }

    public static void HandleUploadedFile(string filename)
    {

        try
        {

            if (CanMoveToSafeFolder(filename))
            {
                // file is OK
                MoveToSafeFolder(filename);
            }
            else
            {
                DeleteFile(filename);
            }
        }
        catch (Exception ex)
        {

        }
        finally
        {
            // do some things
        }

    }
Run Code Online (Sandbox Code Playgroud)

  • 我认为原始问题更多的是关于构造嵌套条件而不是实际决定上传文件是否可以移动到安全文件夹.我的观点是,将检查移动到另一种方法可以保留逻辑,同时提高可读性. (2认同)