मैं मार्टिन फाउलर द्वारा किए गए एक पेपर को देख रहा हूं जिसे Dealing With Roles कहा जाता है। इसमें, फाउलर किसी संगठन (यानी कर्मचारी, अभियंता, प्रबंधक, सेल्समैन) में किसी व्यक्ति के लिए भूमिकाओं से निपटने के लिए तीन मूलभूत रणनीतियों को तोड़ देता है जिसमें भूमिका सबटाइपिंग, रोल ऑब्जेक्ट और रोल रिलेशनशिप शामिल हैं।रोल ऑब्जेक्ट पैटर्न प्रश्न
1 99 7 में लिखा गया यह निश्चित रूप से पुराना है, और "काम करने का मसौदा" होने के कारण इसमें कुछ त्रुटियां भी हैं जो अन्यथा वहां नहीं होंगी। मैं रोल ऑब्जेक्ट के उदाहरण के बारे में उलझन में हूं, और नीचे दिए गए अपने कुछ जावा कोड की मेरी सी # व्याख्या शामिल है।
मैं तीन प्रश्न हैं:
(1) वहाँ प्रकार पहचान का एक बहुत तार की तरह यह जेनरिक के साथ बदली किया जाना चाहिए लगता है कि के साथ किया जा रहा है, लेकिन मैं कैसे इतना अभी तक ऐसा करने के लिए पर एक संभाल नहीं कर सकते। जेनेरिक का उपयोग करके आप इस कोड को कैसे कार्यान्वित करेंगे?
(2) जॉब रोल एक प्रकार के स्ट्रिंग नाम के रूप में कोड में है लेकिन इसे विशेष रूप से शेष कोड के साथ परिभाषित नहीं किया गया है। मैं नहीं बता सकता कि यह PersonRole के लिए आधार वर्ग है या नहीं। जॉब रोल की परिभाषा क्या है? क्या इकाई परीक्षण पैटर्न के उपयोग के सही उदाहरण की तरह दिखता है?
(3) क्या किसी के पास हालिया कार्यान्वयन और रोल ऑब्जेक्ट का उपयोग करने के उदाहरण के लिए कोई लिंक है?
चीयर्स,
Berryl
public class PersonWithRoles : Person
{
private readonly IList<PersonRole> _roles = new List<PersonRole>();
public static PersonWithRoles CreatePersonWithRoles(string identifierName) {
...
}
public void AddRole(PersonRole role) { _roles.Add(role); }
public PersonRole RoleOf(string typeName) { return _roles.FirstOrDefault(x => x.HasType(typeName)); }
}
public class PersonRole
{
public virtual bool HasType(string typeName) { return false; }
}
public class Salesman : PersonRole
{
public override bool HasType(string typeName)
{
if (typeName.Equals("Salesman", StringComparison.InvariantCultureIgnoreCase)) return true;
if (typeName.Equals("JobRole", StringComparison.InvariantCultureIgnoreCase)) return true;
return base.HasType(typeName);
}
public int NumberOfSales { get; set; }
}
[TestFixture]
public class RoleUsageTests
{
[Test]
public void Test() {
var p = PersonWithRoles.CreatePersonWithRoles("Ted");
var s = new Salesman();
p.AddRole(s);
var tedSales = (Salesman) p.RoleOf("Salesman");
tedSales.NumberOfSales = 50;
}
}
मुझे लगता है कि * तो *। क्या आप कुछ नमूना कोड खरोंच कर सकते हैं या मुझे एक लिंक दे सकते हैं जो इसे दिखाता है? फॉउलर द्वारा एक ही पेपर से चीयर्स – Berryl
: "इस पैटर्न पर एक उपयोगी विविधता मूल वस्तु की भूमिका ऑब्जेक्ट्स सजावटी बनाने के लिए है। यह का अर्थ है कि एक ग्राहक जो केवल कर्मचारी व्यक्ति की विशेषताओं का उपयोग करता है, एक वस्तु से निपट सकता है और नहीं भूमिका वस्तुओं के उपयोग के बारे में जानने की जरूरत है। लागत यह है कि जब कभी व्यक्ति का इंटरफेस बदल जाता है, तो सभी भूमिकाओं को अद्यतन करने की आवश्यकता होती है।यह कैसे करें इसे करने के तरीके के बारे में अधिक जानकारी के लिए [Bäumer et al] देखें। " – Berryl
यहां [बामर के काम के लिंक] (http://hillside.net/plop/plop97/Proceedings/riehle.pdf) है कि फाउलर संदर्भ। यह रूपरेखा (3) प्रमुख प्रतिभागियों से बना एक पैटर्न; आपके उदाहरण का उपयोग करने के लिए एक अमूर्त प्रोग्रामर होगा जो प्रोग्रामर के लिए इंटरफ़ेस को परिभाषित करता है और भूमिकाओं के प्रबंधन के लिए इंटरफ़ेस को परिभाषित करता है। फिर प्रोग्रामरकोर होता है जो प्रोग्रामर इंटरफ़ेस और भूमिका संशोधन दोनों को लागू करता है अंत में प्रोग्रामररोल है जो प्रोग्रामरकोर के उदाहरण को सजाने के लिए तैयार करता है। एचटीएमएल कोडररोल और सीनियरडेवोल प्रोग्रामररोल के उप-वर्ग हैं। चीयर्स – Berryl