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)
你在这里得到的是一个双参数函数,期望可以解析为日期的字符串.如果缺少第二个参数,则使用第一个参数; 如果缺少第一个,则使用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]; 这可能是一个错误.