現在リファクタリングしようとしているレガシーコードがあります。
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);
}
}
私が抱えている問題は、2つの元のインターフェイスIFileReaderとIFileWriterです。これらは互いに非常に近い形状ですが、2つの完全に異なるメソッドstring ReadLine()があります。およびvoidWriteLine(string line); 私は一般的なアブストラクションを見つけることができませんでした。
基本的に、私のリファクタリングの目標は、IFileReaderインターフェイスとIFileWriterインターフェイスを同じように見せ、2つではなく共通のインターフェイスを使用することです。
現在、これらのインターフェイスは次のようになっています。
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);
}
誰かが私がこれを達成するためにどのように回避できるかについていくつかの提案を私に与えることができますか?
わかりにくい場合は、さらに詳しい説明が必要な場合はお知らせください。