我有40个供应商需要进行FTP连接,执行一些操作后关闭连接。因此,这40个供应商都有自己的类,并且都具有FTP服务器的连接和断开连接功能,但它们都有不同的处理方法。
基本上,我有40个类都包含以下方法:
我这里的问题是40家供应商的所有方法都有不同的输入参数,那么Process的输入参数将会是什么?而且,我认为我并没有获得很多好处,因为我仍然在这里使用FtpConnection ftp参数,这意味着我必须在每个使用Connect方法的项目中添加具有FtpConnection类的dll。
例如,供应商中的process方法看起来像这样:
这里是否有一种设计模式可用,可以使代码更加简洁易懂,操作更加轻松?
基本上,我有40个类都包含以下方法:
ftp.Connect();
//do something - this is different for all the classes
ftp.Close();
因此,“做某事”部分对于每个人都不同,它执行不同的任务,使用不同的变量等。
我的想法是:创建一个新类,将在所有40个供应商中实例化。这个类将有一个方法,看起来像这样:
public void Connect(FTPCredentials credentials, Process process)
{
var ftp = new FtpConnection(credentials.Host, credentials.Username, credentials.Password);
ftp.Open();
ftp.Login();
process(ftp);
ftp.Close();
}
public delegate void Process(FtpConnection ftp/*, string name*/);
我这里的问题是40家供应商的所有方法都有不同的输入参数,那么Process的输入参数将会是什么?而且,我认为我并没有获得很多好处,因为我仍然在这里使用FtpConnection ftp参数,这意味着我必须在每个使用Connect方法的项目中添加具有FtpConnection类的dll。
例如,供应商中的process方法看起来像这样:
process(string fileName) //and it would download fileName
process(string folderName) //create folder if it doesnt exist
这里是否有一种设计模式可用,可以使代码更加简洁易懂,操作更加轻松?
Process
方法(参数为List
),或者我可能漏掉了什么? - Andre Hofmeisterusing
语句替换的能力),请参阅IDisposable
。至于不同的方法,您可以使用泛型来提供参数作为设置类,例如using (var connection = new FTPConnection<SettingsForFolder>(...) { ... }
,设置实例甚至可以设置为构造函数参数,然后在每个Process()
调用时无需提供它即可访问。 - Sinatr