2012-09-20 23 views
10

मैं सिर्फ ईवेंट संचालित आर्किटेक्चर में जा रहा हूं और यह जानना चाहता हूं कि कमांड और घटनाओं का नामकरण करने के लिए सम्मेलन क्या है। मुझे यह बहुत कुछ पता है: कमांड फॉर्म में होना चाहिए कुछ घटनाओं के रूप में होना चाहिए SomethingHappened। मुझे यह स्पष्ट करने की आवश्यकता है कि अगर मुझे अपने आदेशों के लिए 'कमांड' शब्द और 'इवेंट' को मेरी घटनाओं में जोड़ना है। DoSomethingCommand सिर्फ कुछ करने के विरोध में कुछ और कुछ हद तक किया गया है। मैं यह भी जानना चाहूंगा कि समुदाय-पसंदीदा सम्मेलन के पीछे तर्क क्या है। धन्यवाद!कमांड और घटनाओं के लिए नामकरण सम्मेलन

+0

धन्यवाद! बस ऐसा किया। कैसे पता लगाने के लिए थोड़ी देर लग गई। – Tolu

उत्तर

12

Command और Event प्रत्यय वैकल्पिक हैं और वरीयता का विषय हैं। मैं उन्हें छोड़ना पसंद करता हूं और अकेले नाम से स्पष्ट इरादा बनाने की कोशिश करता हूं। नामकरण आदेशों और घटनाओं का सबसे महत्वपूर्ण पहलू यह सुनिश्चित कर रहा है कि वे तकनीकी डोमेन से अधिक व्यापार डोमेन को प्रतिबिंबित करें। कई बार निर्माण, अद्यतन, जोड़ें, परिवर्तन जैसे शब्द बहुत तकनीकी हैं और व्यवसाय डोमेन में कम अर्थ है। उदाहरण के लिए, UpdateCustomerAddress कहने के बजाय आप RelocateCustomer कह सकते हैं जिसके लिए इसका एक बड़ा व्यावसायिक संदर्भ हो सकता है।

+0

धन्यवाद, मैंने इस दृष्टिकोण का उपयोग करके कार्यान्वित करना शुरू कर दिया है। मुझे नेमस्पेस का उपयोग करने के बारे में @ मिकाएलओस्टबर्ग के बिंदु भी पसंद हैं। एक मामूली बिंदु मैंने नोटिस किया था हालांकि यह तथ्य था कि ऑब्जेक्ट/कमांड को ऑब्जेक्ट को तत्काल करने पर बेहतर पढ़ना प्रतीत होता था। की तुलना करें: 'वर userSignedOut = नए UserSignedOut() {};' ' bus.Publish (userSignedOutEvent); ' वर userSignedOutEvent = नए UserSignedOutEvent() {} के साथ ' ;' ' bus.Publish (userSignedOut); ' – Tolu

8

मेरा सम्मेलन नामस्थानों पर निर्भर करता है और इसका मतलब है कि मैं कभी भी प्रत्यय घटना और न ही कमांड का उपयोग करता हूं।

मैं आदेशों और घटनाओं को अलग-अलग नामस्थानों में भी व्यवस्थित करता हूं जो कुल प्रकार के आधार पर प्रभावित होते हैं।

उदाहरण:

// Commands 
MyApp.Messages.Commands.Customers.Create 
MyApp.Messages.Commands.Orders.Create 
MyApp.Messages.Commands.Orders.AddProduct 

// Events 
MyApp.Messages.Events.Customers.Created 
MyApp.Messages.Events.Orders.Created 
MyApp.Messages.Events.Orders.ProductAdded 

अपनी आवश्यकताओं तो आपको एक अलग विधानसभा में अपनी घटनाओं जगह चाहते हो सकता है पर निर्भर करता है। इसका कारण यह होगा कि यदि आपको डाउनस्ट्रीम सिस्टम में ईवेंट वितरित करने की आवश्यकता है। उस स्थिति में आप शायद डाउनस्ट्रीम सिस्टम को अपने आदेशों के बारे में परेशान नहीं करना चाहते हैं (क्योंकि उन्हें नहीं करना चाहिए)।

+0

बहुत बहुत धन्यवाद, @ मिकाएल। यह बहुत समझ में आता है और वह दिशा है जिसमें मैं वर्तमान में झुका रहा हूं। मैं सिर्फ यह स्पष्ट करना चाहता था कि मानक अभ्यास क्या है। – Tolu

+0

मैं नहीं कहूंगा कि यह मानक अभ्यास है। यह वही तरीका है जो मैं करता हूं। हालांकि, मुझे लगता है कि यह इस प्रकार है। नेट सम्मेलन पूरे नाम के हिस्से के रूप में नामस्थानों का उपयोग करते हैं और खुद को प्रत्यय और सामान के साथ दोहराते नहीं हैं। केवल नकारात्मक पक्ष यह है कि जब आप 'निर्मित' नामक 20 कुछ घटनाओं में से किसी एक के लिए उपयोग कथन जोड़ना चाहते हैं तो resharper एक बहुत सारे विकल्प प्रदान करता है। –

+0

मैं अपने आदेशों और घटनाओं को अलग असेंबली में अलग करता हूं और उपरोक्त वर्णित @ MikaelÖstberg के रूप में अलग-अलग नामस्थानों का उपयोग करता हूं। मैं उन संदेशों के अंत में कमांड या इवेंट से निपटने के लिए वकालत नहीं करता हूं। +1 –

3

यदि कमांड/घटनाओं का सही ढंग से नाम दिया गया है तो निलंबित कमांड और ईवेंट अनावश्यक जानकारी होगी। यह शोर होगा जो आपके कोड को कम पठनीय बनाता है। हंगेरियन नोटेशन याद रखें? अधिकांश प्रोग्रामर (जिन्हें मैं जानता हूं) अब इसका उपयोग नहीं करते हैं।

3

कमांड और घटनाएं आपके आवेदन के लिए भाषा बनाती हैं ... एक एपीआई। 'कमांड' और 'इवेंट' जैसे शब्दों का उपयोग शायद सिस्टम-स्तरीय परिभाषाओं के लिए उपयोगी है जहां तकनीकी शर्तों को अर्थपूर्ण रूप से किसी इकाई के उद्देश्य में मिश्रित किया जाता है, लेकिन यदि आप डोमेन व्यवहार के लिए परिभाषाओं से निपट रहे हैं, तो सिस्टम/तकनीकी शब्दावली को छोड़ दें और व्यापार-भाषण का पक्ष लें। यह आपके कोड को अधिक स्वाभाविक रूप से और टाइपिंग को कम कर देगा। मैंने 'कमांड'/'इवेंट' परिशिष्टों के साथ शुरुआत की लेकिन महसूस किया कि यह समय बर्बाद था और मुझे लोकप्रिय भाषा डीडीडी से दूर ले गया। HTH, माइक

1

परंपरा है कि मैं एक बहुत देखा है और अपने आप का उपयोग किया है कि घटनाओं भूत काल में हो सकता है और वर्णित क्या हुआ चाहिए:

  • UserRegistered
  • AccountActivated
  • ReplyPosted

कमांड कुछ ऐसा है जो आप करना चाहते हैं।तो ऐसे नाम हैं जो यह दर्शाते हैं कि बनाने के लिए:

  • CreateUser
  • UppgradeUserAccount

संगठन के लिए के रूप में, मैं आमतौर पर उन्हें एक साथ जड़ कुल कि वे के लिए कर रहे हैं के साथ डाल दिया। यह देखने में बहुत आसान बनाता है कि आप क्या कर सकते हैं और किस तरह की घटनाएं उत्पन्न होती हैं।

यही है, मैं प्रत्येक रूट कुल के लिए एक नामस्थान बना देता हूं और इसके तहत सब कुछ डालता हूं (भंडार परिभाषा, घटनाएं, आदेश)।

  • MyApp.Core.Users
  • MyApp.Core.Posts

आदि

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