我有这段遗留代码,我现在正试图重构:
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);
}
有人可以就如何实现这个目标向我提出一些建议吗?
如果我不清楚要理解,请告诉我是否需要进一步澄清。
答案 0 :(得分:1)
我真的不明白为什么你想为这种不同的操作使用通用接口,但假设你有充分的理由,我想你可以做这样的事情,其中line
将被读取或写,取决于文件模式:
public interface IFileAccessor : IDisposable
{
void OpenFileStream(string fileName);
void Close();
void TransferLine(ref string line);
}