假设有一个IReader接口,一个IReader接口ReaderImplementation的实现以及一个使用和处理来自读取器的数据的类ReaderConsumer。
public interface IReader
{
object Read()
}
实作
public class ReaderImplementation
{
...
public object Read()
{
...
}
}
消费者:
public class ReaderConsumer()
{
public string location
// constructor
public ReaderConsumer()
{
...
}
// read some data
public object ReadData()
{
IReader reader = new ReaderImplementation(this.location)
data = reader.Read()
...
return processedData
}
}
为了测试ReaderConsumer和处理,我使用了IReader的模拟。因此,ReaderConsumer变为:
public class ReaderConsumer()
{
private IReader reader = null
public string location
// constructor
public ReaderConsumer()
{
...
}
// mock constructor
public ReaderConsumer(IReader reader)
{
this.reader = reader
}
// read some data
public object ReadData()
{
try
{
if(this.reader == null)
{
this.reader = new ReaderImplementation(this.location)
}
data = reader.Read()
...
return processedData
}
finally
{
this.reader = null
}
}
}
在此解决方案中,由于仅模拟构造函数提供了接口的实例,因此模拟为生产代码引入了if语句。
在撰写本文时,我意识到try-finally块在某种程度上是无关的,因为在那里可以处理用户在应用程序运行时更改位置的情况。
总的来说,它闻起来很臭,如何更好地处理?
ReaderConsumer
独立ReaderImplementation
?