C# 远程文件操作的接口?

C# 远程文件操作的接口?,c#,interface,C#,Interface,我正在为不同系统和客户端之间的EDI操作开发一种服务,并认为在远程服务器上使用文件操作服务接口是一种明智的做法。假设一个远程服务器使用SFTP,而另一个FTP和另一个FTP,以此类推 对于每种情况,我需要的方法都是相同的基本集:ListDirectory()、UploadFile()、DownloadFile()等等。 我喜欢在客户端实现接口的想法,基本上不必再担心实现问题 public interface IRemoteFileOperator { void Creat

我正在为不同系统和客户端之间的EDI操作开发一种服务,并认为在远程服务器上使用文件操作服务接口是一种明智的做法。假设一个远程服务器使用SFTP,而另一个FTP和另一个FTP,以此类推

对于每种情况,我需要的方法都是相同的基本集:ListDirectory()、UploadFile()、DownloadFile()等等。 我喜欢在客户端实现接口的想法,基本上不必再担心实现问题

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"
    };
    
  • 还有其他解决方案,如fluent builder模式,可以很好地使用,但需要更多的实现


  • 试试代码回顾:答案很好,非常感谢。我不知道你能做到1。二,。这真是大开眼界!