用Ifs重构帮助

zSy*_*sis 2 refactoring .net-2.0

我一直在研究这段代码,出于某种原因,所有的if都让我疯狂了,还有一堆重复的代码.有更好的清洁方法吗?

public Program(string[] args)
    {
        try
        {
            WriteToLogFile("Starting ImportTask");
            if (args.Length == 0)
            {
                Import(DateTime.Now,DateTime.Now);
                MarkRecordsAsDeleted();
            }
            else if (args.Length == 1)
            {
                DateTime dateToImport;
                bool isValidDate = DateTime.TryParse(args[0], out dateToImport);
                if (isValidDate)
                {
                    Import(dateToImport,dateToImport);
                    MarkRecordsAsDeleted();
                }
                else
                    WriteToLogFile(String.Format("The Import date specified was invalid. - {0}", args[0]));
            }
            else if (args.Length == 2)
            {
                DateTime importStartDate;
                bool isValidStartDate = DateTime.TryParse(args[0], out importStartDate);
                DateTime importEndDate;
                bool isValidEndDate = DateTime.TryParse(args[0], out importEndDate);
                if (isValidStartDate && isValidEndDate)
                {
                    if (importStartDate > importEndDate)
                    {
                        WriteToLogFile(String.Format("Invalid date range provided. Start date = {0} End date {1}",importStartDate,importEndDate));
                        return;
                    }
                    Import(importStartDate, importEndDate);
                    MarkRecordsAsDeleted();
                }
                else
                    WriteToLogFile(String.Format("The Import date specified was invalid. - {0}", args[0]));
            }
            else
            {
                WriteToLogFile("Invalid Command Line Parameters Specified");
            }

        }
        catch (Exception ex)
        {
            WriteToLogFile("Error in Import Process = " + ex.StackTrace);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Car*_*ter 5

你在这里得到的是一个双参数函数,期望可以解析为日期的字符串.如果缺少第二个参数,则使用第一个参数; 如果缺少第一个,则使用DateTime.Now.

所以,写一个两个参数的函数,它需要两个日期.叫它.有点像:

switch(args.length) {
    case 0: myFunc(DateTime.Now, DateTime.Now); break;
    case 1: myFunc(toDate(args[0]), toDate(args[0])); break;
    case 2: myFunc(toDate(args[0]), toDate(args[1])); break;
}
Run Code Online (Sandbox Code Playgroud)

顺便说一下,你的功能似乎并没有提到args [1]; 这可能是一个错误.