कभी-कभी, मैं वर्गों या विधियों को सजाने के लिए विशेषताओं का उपयोग करता हूं और 'जिम्मेदार' डेटा प्राप्त करने के लिए प्रतिबिंब का उपयोग करता हूं।
शायद समझाने में थोड़ा मुश्किल हो, लेकिन आखिरी चीज जिसके लिए मैंने विशेषताओं का उपयोग किया है, एक ऐसे सिस्टम में है जहां मेरे पास डेटाबेस में कुछ इकाइयां हैं।
प्रत्येक इकाई के पास कुछ प्रकार का 'कोड' होता है, और प्रत्येक इकाई में कुछ व्याख्या नियम भी हो सकते हैं।
मेरी परियोजना में, मेरे पास एक इकाई वर्ग है, जो डेटाबेस में मौजूद एक इकाई का प्रतिनिधित्व करता है, और मेरे पास 'नियम' वर्गों का एक सेट भी है। एक नियम वर्ग में किसी दिए गए इकाई की व्याख्या तर्क शामिल है।
मेरी इकाई के एक विशिष्ट उदाहरण के लिए एक निश्चित 'नियम' (व्याख्या) 'लिंक' करने के लिए, मैंने एक कस्टम विशेषता बनाई है।
मैं इस विशेषता के साथ अपने 'नियम' वर्ग को सजाने के लिए, और विशेषता के माध्यम से, मैं परिभाषित करता हूं कि यह किस नियम के लिए एक नियम है। फिर, जब मैं डीबी से एक इकाई लोड करता हूं, तो मैं उस इकाई में सही नियम इंजेक्ट करता हूं।
कोड का एक छोटा सा बातें स्पष्ट करना:
public class MyEntity
{
public string Code
{
get;
private set;
}
public bool IsValidFor(...)
{
IRule rule = RuleRegistry.GetRuleFor(this);
if(rule.IsValid()) ...
}
}
[RuleAttrib("100")]
public class MyRule : IRule
{
public bool IsValid()
{
}
}
यह सिर्फ एक छोटे से उदाहरण है, लेकिन मुझे लगता है कि आप बहाव को पकड़ने के लिए होगा।
MyRule क्लास पर नियम एट्रिब विशेषता, कहता है कि यह एक ऐसा नियम है जिसे MyClass के उदाहरण पर लागू किया जाना चाहिए जिसमें कोड "100" है।
नियम रजिस्ट्री उदाहरण वर्तमान इकाई (प्रतिबिंब का उपयोग करके) के लिए सही आईर्यूल पुनर्प्राप्त करने में सक्षम है।
जहाँ मैं प्रयोग किया जाता है गुण है, Postsharp के साथ संयोजन में में एक और उदाहरण, एक 'ताला' प्रणाली के कार्यान्वयन है: http://fgheysels.blogspot.com/2008/08/locking-system-with-aspect-oriented.html
डर्न, आपने मुझे इसे हराया! प्रिंसिपल प्रामिशन एट्रिब्यूट के लिए –
+1 - मुझे विश्वास नहीं है कि मैंने इसे पहले मैन्युअल रूप से किया था। – Botz3000