एक IReader इंटरफ़ेस, IReader इंटरफ़ेस Reader कार्यान्वयन, और एक वर्ग 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
}
}
}
इस सॉल्यूशन में मॉकिंग परिचय कोड को उत्पादन कोड के लिए प्रस्तुत करता है क्योंकि केवल मॉकिंग कंस्ट्रक्टर इंटरफ़ेस के इंस्टेंसेस की आपूर्ति करता है।
यह लिखने के दौरान मुझे पता चलता है कि कोशिश-अंत में कुछ हद तक असंबंधित है क्योंकि यह अनुप्रयोग चलाने के समय के दौरान स्थान बदलने वाले उपयोगकर्ता को संभालने के लिए है।
कुल मिलाकर यह बदबूदार लगता है, इसे बेहतर तरीके से कैसे संभाला जा सकता है?
ReaderConsumer
स्वतंत्र होने के सवाल से बाहर हैReaderImplementation
?