मैं पहले कुछ कोड रीफैक्टर कर रहा था और मैं एक इटरेटर ब्लॉक के कार्यान्वयन में आया था, जिसके बारे में मुझे यकीन नहीं था। एक सिस्टम की एकीकरण परत में जहां क्लाइंट कुछ डेटा के लिए एक्स्ट्राइनल एपीआई को कॉल कर रहा है, मेरे पास अनुवादकों का एक सेट है जो एपीआई से वापस डेटा लेते हैं और इसे तर्क परत में उपयोग की जाने वाली व्यावसायिक संस्थाओं के संग्रह में अनुवाद करते हैं। एक आम अनुवादक वर्ग इस तरह दिखेगा:इटेटरेटर ब्लॉक का सही उपयोग
// translate a collection of entities coming back from an extrernal source into business entities
public static IEnumerable<MyBusinessEnt> Translate(IEnumerable<My3rdPartyEnt> ents) {
// for each 3rd party ent, create business ent and return collection
return from ent in ents
select new MyBusinessEnt {
Id = ent.Id,
Code = ent.Code
};
}
आज मैं निम्नलिखित कोड भर में आया था। फिर, यह एक अनुवादक वर्ग है, इसका उद्देश्य विधि वापसी प्रकार में पैरामीटर में संग्रह का अनुवाद करना है। हालांकि, इस समय यह एक iterator ब्लॉक है:
// same implementation of a translator but as an iterator block
public static IEnumerable<MyBusinessEnt> Translate(IEnumerable<My3rdPartyEnt> ents) {
foreach(var ent in ents)
{
yield return new MyBusinessEnt {
Id = ent.Id,
Code = ent.Code
};
}
}
मेरा प्रश्न है: इस पुनरावर्तक ब्लॉक के एक वैध उपयोग है? मैं इस तरह से एक अनुवादक वर्ग बनाने का लाभ नहीं देख सकता। क्या इसका परिणाम कुछ अप्रत्याशित व्यवहार में हो सकता है?
मेरे लिए पूरी तरह से मान्य लगता है- यह दो इकाइयों के बीच संकलन-सुरक्षित अनुवाद प्रदान करता है।इसके साथ समस्या क्या है? –