Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 重构:找到一个通用的抽象_Oop_Refactoring - Fatal编程技术网

Oop 重构:找到一个通用的抽象

Oop 重构:找到一个通用的抽象,oop,refactoring,Oop,Refactoring,我现在正试图重构这段遗留代码: public class FileManger { private IFileReader _fileReader; private IFileWriter _fileWriter; public enum Mode { Read = 1, Write = 2 }; public void Open( Mode mode) { if (mod

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

    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();和无效写线(字符串行);我找不到一个普通的禁欲

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

目前,这些接口如下所示:

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

        string ReadLine();
    }

有没有人能给我一些建议,告诉我如何才能做到这一点


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

我真的不明白您为什么想要使用一个通用接口来进行这些不同的操作,但是假设您有充分的理由,我想您可以这样做,在这里可以读或写
,根据文件模式:

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

我认为你不应该在IFileReader和IFileWriter之间寻找一个概括。看起来一个专用于输入,另一个专用于输出。所以,我不会强迫他们相似。@Barth。谢谢你的评论。你认为我还有其他方法可以改进代码的设计吗?嗯。。。不幸的是,这段代码不适用。
public interface IFileAccessor : IDisposable
{
    void OpenFileStream(string fileName);
    void Close();
    void TransferLine(ref string line);
}