Bir IReader arayüzü, IReader arayüzü ReaderImplementation uygulaması ve okuyucudan veri tüketen ve işleyen bir sınıf ReaderConsumer varsayarsak.
public interface IReader
{
object Read()
}
uygulama
public class ReaderImplementation
{
...
public object Read()
{
...
}
}
Tüketici:
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 ve işlemeyi test etmek için bir IReader taklidi kullanıyorum. Böylece 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
}
}
}
Bu çözümde alaycı üretim kodu için bir if cümlesini getirir, çünkü sadece alaycı kurucu arabirimin bir örneğini sağlar.
Bunu yazarken, uygulamanın çalışma zamanı sırasında kullanıcının yerini değiştirmesini sağlamak için try-finally bloğunun biraz ilgisiz olduğunu anlıyorum.
Genel olarak koklamak hissediyor, nasıl daha iyi ele alınabilir?
ReaderConsumer
bağımsızReaderImplementation
?