【发布时间】:2014-03-30 12:19:38
【问题描述】:
我创建了一个如下所示的界面:
interface ICsvReader
{
List<string> ReadFromStream(Stream csvStream);
}
我的问题是关于返回类型List<string>。在教程中,我可以看到很多方法只是 void 的示例。在这种情况下,界面看起来很自然:
interface ILogger
{
void LogError(string error);
}
您没有任何特定的日志记录目的地或如何记录错误的方法。就像我说的那样,这对我来说看起来很自然,但是要返回的特定类型呢?这不是不好的方法吗?当我使用接口时,我想对我的方法创建一些抽象——“你应该这样做,但我不在乎怎么做”。那么您对文件阅读器的界面或其他东西有更好的想法吗?我想从不同的来源读取 CSV,但总是返回 List<string>。好方法还是坏方法?
【问题讨论】:
-
您是说每个实现 ICsvReader 的类都应该实现一个返回
List<string>的方法。这怎么可能被认为是坏事?这正是你想要的。 -
'你应该这样做,但我不在乎如何' - 这正是你的界面所做的。 “你应该获取一个流并给我一个字符串列表;我不在乎你是如何得到它的。”
-
我说不好是因为也许我应该更一般地定义该操作的结果。
-
我认为在接口中返回 List
并没有错。但是,我会使用一个接口来支持从不同数据格式返回 List 的不同类。我宁愿将接口视为 IMyDataReader {List ReadFromStream(Stream fileStream);}。然后 CsvReader 将实现该接口。 -
@AntP 有时你意识到你实际上想说“你应该获取一个字节流并给我一个字符串“流”;我不在乎你是如何得到它的,但我不想听到任何
OutOfMemoryException废话”。
标签: c# interface abstraction