मेरे पास एक साधारण "समस्या" है जो मुझे लगता है कि मुझे कुछ समाधान मिल गए हैं, लेकिन मुझे यकीन नहीं है कि सी # में सबसे अच्छा अभ्यास करने का तरीका नहीं है।सी # :: इवेंट हैंडलिंग इंटरफ़ेस से प्राप्त घटनाओं या ऑब्जेक्ट्स का संग्रह कब उपयोग करें?
मेरे पास एक मास्टर ऑब्जेक्ट है (एक सिंगलटन कहें) एप्लिकेशन के जीवनकाल के दौरान एक बार instanciated। यह "मास्टर क्लास" नए प्रकार की वस्तुओं का एक गुच्छा बनाता है, हर बार MasterClass.Instance.CreateSlaveObject कहा जाता है, "SlaveClass" कहें।
यह मास्टर क्लास स्टेटस चेंज के लिए किसी अन्य ऑब्जेक्ट पर भी नजर रखता है, और जब ऐसा होता है, तो स्लेव क्लास ऑब्जेक्ट्स को बदलाव के बारे में सूचित करता है। काफी सरल लगता है।
जब से मैं मूल सी ++ दुनिया से आते हैं, जिस तरह से मैंने किया पहले यह एक अंतरफलक
Interface IChangeEventListener
{
void ChangeHappened();
}
जहाँ से मैं "SlaveClass" व्युत्पन्न है। फिर मेरे "मास्टर क्लास" में मेरे पास है:
...
IList<IChangeEventListener> slaveList;
...
CreateSlaveObject
{
...
slaveList.Add(slave);
}
...
ChangeHappened()
{
...
foreach(var slave in slaveList)
{
slave.ChangeHappened();
}
}
और यह काम करता है। लेकिन अगर मैं ऐसा करने का एक और (बेहतर) तरीका हूं तो मैं अपने दिमाग के पीछे सोच रहा था। तो मैंने विषय पर थोड़ा और शोध किया और सी # घटनाओं को देखा।
तो मास्टर क्लास में दासों के संग्रह को बनाए रखने के बजाय, मैं मूल रूप से मास्टर क्लास को स्लेव क्लास (या किसी संपत्ति के माध्यम से) के सीटीआर में इंजेक्ट करता हूं और स्लेव क्लास ऑब्जेक्ट को इवेंट हैंडलर के रूप में चेंजप्पन किया जाता है। इस सचित्र किया जाएगा:
...Master...
public delegate void ChangeHappenedDelegate(object sender, NewsInfoArgs args);
public event NewUpdateDelegate ChangeHappenedEvent;
....
public SlaveClass (MasterClass publisher) //inject publisher service
{
publisher.ChangeHappenedEvent += ChangeHappened;
}
लेकिन इस दास और मास्टर के बीच एक गैर-आवश्यक युग्मन की तरह प्रतीत हो रहा है, लेकिन मैं प्रदान की निर्माण में ईवेंट सूचना तंत्र की शान की तरह।
तो क्या मुझे अपना वर्तमान कोड रखना चाहिए, या घटना आधारित दृष्टिकोण (प्रकाशक इंजेक्शन के साथ) में जाना चाहिए? और क्यों?
या यदि आप एक वैकल्पिक समाधान का प्रस्ताव दे सकते हैं तो शायद मुझे याद आएगा, मैं भी इसकी सराहना करता हूं।
साफ! मुझे वास्तव में मास्टरक्लस के इवेंट हुकिंग की देखभाल करने के लिए प्रस्तावित दृष्टिकोण पसंद है, लेकिन घटनाओं के तंत्र को ध्यान में रखते हुए :) जैसा कि मैंने देखा है, जैसा समस्या मैंने देखी है, इस बात की कोई गारंटी नहीं है कि स्लेव मास्टर के रूप में तब तक जीवित रहेगा ... इसलिए यदि मैं स्लेव विनाशक में घटना को अनदेखा करना चाहता हूं, तो मैं युग्मन वापस लाऊंगा:/ – Futurist
ठीक है, एक विकल्प है, मुझे अपना जवाब बदलने दो। –
इंडिपथ उत्तर के लिए धन्यवाद। मैं इस पर विचार करूंगा क्योंकि कुछ अवधारणाएं हैं (जैसे कमजोर पड़ने) जो अभी भी मुझसे अपरिचित हैं। – Futurist