我有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