2

我现在正在尝试重构这段遗留代码:

    public class FileManger
    {
        private IFileReader _fileReader;
        private IFileWriter _fileWriter;

        public enum Mode { Read = 1, Write = 2 };

        public void Open( Mode mode)
        {
            if (mode == Mode.Read)
            {
                _fileReader = new FileReader();
            }
            else if (mode == Mode.Write)
            {
                _fileWriter = new FileWriter();
            }
        }
    }

我需要能够用工厂方法替换这段代码并将返回的代码分配给一个公共文件。

所以..我试图让它看起来像:

public class FileManger
{
    private IFileHandler _fileHandler;

    public enum Mode { Read = 1, Write = 2 };

    public void Open(string fileName, Mode mode)
    {
        _fileHandler = Factory.CreateFileHandler(mode);
    }
 }

我遇到的问题是两个原始接口 IFileReader 和 IFileWriter,虽然它们在形状上非常接近,但它们有两个完全不同的方法 string ReadLine(); 和 void WriteLine(字符串行); 我找不到一个共同的抽象。

基本上我的重构目标是使 IFileReader 和 IFileWriter 接口看起来相同,并使用一个通用接口而不是两个。

目前这些接口如下所示:

 public interface IFileReader : IDisposable
    {
        void OpenFileStream(string fileName);
        void Close();

        string ReadLine();
    }

public interface IFileWriter : IDisposable
    {

        void OpenFileStream(string fileName);
        void Close();

        void WriteLine(string line);
    }

有人可以给我一些关于如何实现这一目标的建议吗?

如果您需要任何进一步的澄清,请告诉我,如果我不清楚理解。

4

1 回答 1

1

我真的不明白你为什么要为这些不同的操作使用一个通用接口,但假设你有充分的理由,我想你可以做这样的事情line,根据文件模式读取或写入的位置:

public interface IFileAccessor : IDisposable
{
    void OpenFileStream(string fileName);
    void Close();
    void TransferLine(ref string line);
}
于 2012-06-25T12:05:54.877 回答