У меня 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 поставщиков имеют различные входные параметры так, что бы входные параметры процесса? Кроме того, я думаю, что не получаю многого, потому что у меня все еще есть параметр ftp FtpConnection ftp, что означает, что мне придется добавить DLL, которая имеет класс FtpConnection в каждом проекте, который будет использовать метод Connect.
Например, метод процесс поставщиков будет выглядеть следующим образом:
process(string fileName) //and it would download fileName
process(string folderName) //create folder if it doesnt exist
Есть ли шаблон дизайна можно использовать здесь, что бы чище и будет делать вещи проще?
Вы можете просто переопределить метод «Процесс» (параметр как «Список») или я могу что-то пропустить? – hofmeister
Подключиться/закрыть может быть фактически конструктор/распоряжаться (возможность заменить это с помощью инструкции '' using'] (https://msdn.microsoft.com/en-us/library/yh598w02.aspx), см. 'IDisposable '. Что касается разных методов, вы можете использовать generics для предоставления параметров в качестве класса настроек, например. 'using (var connection = new FTPConnection (...) {...}', экземпляр настроек может быть даже установлен как параметр конструктора, а затем доступен без необходимости его поставки для каждого вызова 'Process()' . –
Sinatr