C# 远程文件操作的接口?
我正在为不同系统和客户端之间的EDI操作开发一种服务,并认为在远程服务器上使用文件操作服务接口是一种明智的做法。假设一个远程服务器使用SFTP,而另一个FTP和另一个FTP,以此类推 对于每种情况,我需要的方法都是相同的基本集:ListDirectory()、UploadFile()、DownloadFile()等等。 我喜欢在客户端实现接口的想法,基本上不必再担心实现问题C# 远程文件操作的接口?,c#,interface,C#,Interface,我正在为不同系统和客户端之间的EDI操作开发一种服务,并认为在远程服务器上使用文件操作服务接口是一种明智的做法。假设一个远程服务器使用SFTP,而另一个FTP和另一个FTP,以此类推 对于每种情况,我需要的方法都是相同的基本集:ListDirectory()、UploadFile()、DownloadFile()等等。 我喜欢在客户端实现接口的想法,基本上不必再担心实现问题 public interface IRemoteFileOperator { void Creat
public interface IRemoteFileOperator
{
void CreateDirectory(string remotePath);
void DeleteFile(string remotepath);
void DeleteDirectory(string remotePath);
void DownloadFile(string remotePath, string localPath);
string[] ListDirectory(string remotePath);
void UploadFile(string localPath, string remotePath);
}
现在我遇到的问题是,对于SFTPServiceProvider类来说,它是非常基本的,但我很难处理FTPServiceProvider类的不同功能。
假设我想在特定情况下使用“被动FTP”或启用SSL
我不想在接口中编写诸如“EnableSSL”和“UseAssive”之类的属性,因为像SFTP这样的其他服务不支持它们,使它们变得无用
我也不喜欢在FTPServiceProvider的构造器中使用它们,因为我觉得它们并不是严格意义上的“必需”来实现它。见鬼,匿名FTP我只需要主机名就可以了
public class FtpProvider : IRemoteFileOperator
{
public FtpProvider(string serverUri, string user, string password)
{
//stuff
}
public FtpProvider(string serverUri, string user, string password,
bool useSSL, bool usePassive)
{
//stuff
}
我可以为每一个可能的组合链接构造器,但在我看来,这将使它非常臃肿
现在我的问题是:
这方面有最佳实践吗
我不应该首先使用接口吗
我应该不担心一个臃肿的构造函数吗
首先,还有其他/更好的方法吗?你的方法很好
如果您不想编写许多不同的构造函数,即使从我的角度来看这是最干净的解决方案,因为您可以定义哪些参数组合是有效的,那么有几种可能来处理它
public FtpProvider(string serverUri, string user = null, string password = null, bool useSSL = false, bool usePassive = false)
{
//stuff
}
var remoteFileOperator = new FtpProvider(ftpUri)
{
user = "user1",
password = "12345"
};
试试代码回顾:答案很好,非常感谢。我不知道你能做到1。二,。这真是大开眼界!