重构:寻找共同的抽象

时间:2012-06-25 11:47:00

标签: oop refactoring

我有这段遗留代码,我现在正试图重构:

    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,虽然它们的形状彼此非常接近,但它们有两个完全不同的方法字符串ReadLine();和void WriteLine(字符串行);为此我找不到共同的abstration。

基本上我的重构目标是使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);
    }

有人可以就如何实现这个目标向我提出一些建议吗?

如果我不清楚要理解,请告诉我是否需要进一步澄清。

1 个答案:

答案 0 :(得分:1)

我真的不明白为什么你想为这种不同的操作使用通用接口,但假设你有充分的理由,我想你可以做这样的事情,其中​​line将被读取或写,取决于文件模式:

public interface IFileAccessor : IDisposable
{
    void OpenFileStream(string fileName);
    void Close();
    void TransferLine(ref string line);
}