我有40个供应商需要建立一个ftp连接,在那里做一些事情并关闭连接。所以,这40家供应商都有自己的班级,他们都有连接和断开的ftp服务器,但他们都有不同的处理方法。在这种情况下使用什么设计模式?
所以基本上我有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个供应商的所有方法有不同的输入参数,这样你会过程的输入参数是什么?另外,我认为我没什么好处,因为我仍然有FtpConnection ftp参数,这意味着我将不得不在每个将使用Connect方法的项目中添加具有FtpConnection类的dll。
例如,在供应商的工艺方法是这样的:
process(string fileName) //and it would download fileName
process(string folderName) //create folder if it doesnt exist
有没有我可以在这里使用,这将是更清洁,会使事情变得更容易设计模式?
您可以简单地重写'Process'方法(参数为'List')或者我可能会丢失什么? – hofmeister
连接/关闭实际上可以是构造函数/处理(可以用['using'](https://msdn.microsoft.com/en-us/library/yh598w02.aspx)语句替换),请参阅'IDisposable '。至于不同的方法,您可以使用泛型来提供参数作为设置类,例如使用(var connection = new FTPConnection(...){...}',设置的实例甚至可以设置为构造函数参数,然后无需为每个Process()调用提供它 –
Sinatr