2009-03-24 12 views
9

के डोमेन प्रेरित डिजाइन संदर्भ में, एक StackOverflow टैग (यानी। ddd) एक मूल्य वस्तु या संस्था है?डीडीडी: एसओ टैग। एक इकाई या मूल्य प्रकार?

संपादित करें:

कल्पना कीजिए, आप इतना वेबसाइट बनाने के है। आप 'टैग' पर कैसे विचार करेंगे?

उत्तर

13

awhite के जवाब पर एक छोटे से विस्तार करने के लिए एक टैग एक मान प्रकार क्यों है? क्योंकि यह भावना क्योंकि एक टैग अपने लेबल को छोड़ कर कोई पहचान नहीं है

var tag1 = new Tag("DDD"); 
var tag2 = new Tag("DDD"); 
Assert.AreNotEqual(tag1, tag2); 

स्पष्ट रूप से वे एक दूसरे के बराबर होना चाहिए करने के लिए नहीं है। दूसरी ओर प्रश्न और उत्तर निश्चित रूप से संस्थाएं हैं

+0

धन्यवाद। मैं इसे खुद बेहतर नहीं कह सकता था। –

+0

टैग को अपनी पहचान लेबल नहीं है? –

+0

इसकी नहीं है कि मूल्य प्रकार एक पहचान की जरूरत नहीं है इसके कि एक विशेष प्रकार के सभी उदाहरणों में एक ही पहचान है –

2

बस कुछ अतिरिक्त विचार: टैग सामान्यीकृत किए जा सकते हैं, "डीडीडी" "डीडीडी" और "डीडीडी" के बराबर होना चाहिए, और अधिकांश टैग सिस्टम में, रिक्त स्थान को " _ "अंडरस्कोर। मुझे लगता है कि निर्माता को बैज सिस्टम के लिए ट्रैक किया जाएगा।

+2

वे निश्चित रूप से सार्थक विचार हैं। मुझे यह इंगित करने दें कि एक मान प्रकार (टैग) किसी इकाई (उपयोगकर्ता) को संदर्भित कर सकता है –

5

अतः टैग सबसे अधिक संभावना एक इकाई है। टैग बनाया जा सकता है, विलय, हटाया और नाम बदल दिया जा सकता है। 'समान टैग' जैसी सुविधाएं हैं, उपयोगकर्ता के टैग इत्यादि। इनमें से कुछ कार्य, विशेष रूप से जीवन चक्र, को पहचान की आवश्यकता होगी। क्लासिक डीडीडी उदाहरण जहां व्यक्ति अपना नाम बदलता है वह वही व्यक्ति है, वही पहचान है। टैग के साथ वही जहां उपयोगकर्ता "डोमेन-संचालित-डिज़ाइन" को "डीडीडी" का नाम बदलने का निर्णय ले सकता है और यह अभी भी वही होगा। टैग भी अतिरिक्त गुण tag.Id, tag.Name, tag.CreatedOn, tag.CreatedBy, tag.Locked आदि जैसे शायद एक इसी टैग भंडार है कि नाम विशिष्टता नियम लागू कर सकते हैं हो सकता है की जरूरत है।

संक्षेप में, अतः टैग एक DDD मूल्य वस्तु है क्योंकि यह अस्थायी है और एक जीवन चक्र होता है नहीं है। सबसे महत्वपूर्ण बात यह है कि टैग न केवल एक प्रश्न की विशेषता है (यही वह है जो मुझे लगता है कि अन्य उत्तरों से अनदेखा किया गया था)। यह उससे कहीं अधिक रिश्तों में भाग लेता है। दूसरे शब्दों में, टैग उसके गुण का सिर्फ एक संख्या से अधिक महत्वपूर्ण है, यह भी 'वैचारिक पहचान' है। दूसरी ओर टैगनाम वैल्यू ऑब्जेक्ट का एक आदर्श उदाहरण है। जीवन में इसका एकमात्र उद्देश्य किसी अन्य इकाई (टैग) का वर्णन करना है। टैगनाम केवल एक स्ट्रिंग से अधिक कुछ नहीं है जिसमें अधिकतम लंबाई और केस असंवेदनशील तुलना जैसे नियमों में कुछ बनाया जा सकता है। इसके बजाय स्ट्रिंग का उपयोग करने के लिए भी समझदारी हो सकती है।

कोड प्रदर्शित करता है कि सवाल कुछ इस तरह उपयोग कर सकते हैं:

IList<TagName> tags = question.GetTags(); 

कोड है कि टैग किए जाने पर सवाल इस तरह दिख सकता:

void TagQuestion(Question q, TagName tagName) { 
    Tag tag = _tagsRepository.FindByName(tagName); 
    if (tag == null) { 
     tag = CreateNewTag(/* capture creator, date, other rules*/); 
    } 
    q.AddTag(tag); 
} 
+2

उल्लेख नहीं है कि SO टैग पर सारांश और उनके साथ जुड़े पूरे विकी हैं ... –

संबंधित मुद्दे