Asumiendo una interfaz IReader, una implementación de la interfaz IReader ReaderImplementation y una clase ReaderConsumer que consume y procesa datos del lector.
public interface IReader
{
object Read()
}
Implementación
public class ReaderImplementation
{
...
public object Read()
{
...
}
}
Consumidor:
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
}
}
Para probar ReaderConsumer y el procesamiento, uso una simulación de IReader. Entonces ReaderConsumer se convierte en:
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
}
}
}
En esta solución, la burla introduce una oración if para el código de producción, ya que solo el constructor de burla proporciona una instancia de la interfaz.
Al escribir esto, me doy cuenta de que el bloque try-finally no está relacionado, ya que está ahí para manejar al usuario que cambia la ubicación durante el tiempo de ejecución de la aplicación.
En general se siente mal, ¿cómo podría manejarse mejor?
ReaderConsumer
independienteReaderImplementation
?