将接口拆分为两个新接口而不破坏客户端代码?

时间:2014-05-20 02:49:29

标签: c#

我有一个读/写Excel文件和XML文件的界面,如下所示:

interface IFileReader
{
   void ReadExcelFile(string filePath);
   void ReadXMLFile(string filePath);
   void WriteExcelFile();
   void WriteXMLFile();
}

如何在不破坏现有客户端代码的情况下将此接口中的方法分成两个不同的接口。新界面应如下所示:

interface IExcelFileReader
{
   void ReadExcelFile(string filePath);
   void WriteExcelFile();
}

interface IXMLFileReader
{
   void ReadXMLFile(string filePath);
   void WriteXMLFile();
}

2 个答案:

答案 0 :(得分:4)

Alexei Levenkov有一个很好的解决方案,但是需要已经实现该接口的类才能在其声明中添加两个新接口。一个不那么具有侵入性的解决方案是:

interface IFileReader: IExcelFileReader, IXMLFileReader
{
}

interface IExcelFileReader
{
    void ReadExcelFile(string filePath);
    void WriteExcelFile();
}

interface IXMLFileReader
{
    void ReadXMLFile(string filePath);
    void WriteXMLFile();
}

答案 1 :(得分:3)

你不能 - 从现有公共接口中删除方法总是会改变。

您可以通过将接口标记为过时并同时在类上实现2组接口来阻止对接口的使用

[Obsolete]
interface IFileReader {...}

class MySuperReader : IFileReader, IExcelFileReader, IExcelFileReader
{
   void ReadExcelFile(string filePath) {...}
   void ReadXMLFile(string filePath) {...}
   void WriteExcelFile() {...}
   void WriteXMLFile() {...}
}