C# 什么是合适的方法来瘦身多重相似的方法?
假设我有两个类似的方法,名为GetFiles和PutFilesC# 什么是合适的方法来瘦身多重相似的方法?,c#,structure,C#,Structure,假设我有两个类似的方法,名为GetFiles和PutFiles public static void GetFiles(string source, string dest) { using (Session session = new Session()) { session.Open(sessionOptions); TransferOptions transferOptions = new T
public static void GetFiles(string source, string dest)
{
using (Session session = new Session())
{
session.Open(sessionOptions);
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
////Different in here////
transferResult = session.GetFiles(source, dest, false, transferOptions);
transferResult.Check();
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Transfer file from {0} to {1}", source, dest);
}
}
}
public static void PutFiles(string source, string dest)
{
using (Session session = new Session())
{
session.Open(sessionOptions);
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
////Different in here////
transferResult = session.PutFiles(source, dest, false, transferOptions);
transferResult.Check();
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Transfer file from {0} to {1}", source, dest);
}
}
}
您可以看到它们完全相同,只是在方法中调用了不同的函数
我考虑添加一个新的方法,名为TrimeFrfile,它接受一个更多的参数来控制PATH文件/GET文件的进程。
public static void TransferFile(string source, string dest, bool GetFile)
{
using (Session session = new Session())
{
session.Open(sessionOptions);
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
if(GetFile)
transferResult = session.GetFiles(source, dest, false, transferOptions);
else
transferResult = session.PutFiles(source, dest, false, transferOptions);
transferResult.Check();
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Transfer file from {0} to {1}", source, dest);
}
}
}
但后来我发现这不是一个最好的解决方案,因为我发现它不能处理超过2个条件get file&put file您可以这样使用
public static void Get_Or_Put_Files(string source, string dest, bool isFilesAreGetting)
{
using (Session session = new Session())
{
session.Open(sessionOptions);
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
if(isFilesAreGetting)
{
transferResult = session.GetFiles(source, dest, false, transferOptions);
}
else
{
transferResult = session.PutFiles(source, dest, false, transferOptions);
}
transferResult.Check();
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Transfer file from {0} to {1}", source, dest);
}
}
}
只需添加一个额外参数,即可判断此方法是否正在获取或放置您的文件。它不能处理两个以上的条件是什么意思?如果我还有一个函数-transferResult=session.CompareFileSource、dest、false、transferOptions,然后我必须将TransferFilestring source、string dest、bool GetFile的参数更改为TransferFilestring source、string dest、int FileAction,这样我就可以处理更多不同的进程,但我认为这个解决方案根本不好,我的意思是,我认为这是一个非常好的解决方案。您已经确定了重复功能,并将其分解为单个方法,从而强制执行“请勿重复自己”原则。谢谢,但这正是我提出的,我想知道是否有更好的解决方案。但我不认为存在更好的解决方案,正是这一点。