2012-02-22 11 views
6

आप रिपोजिटरी और सेवा इंटरफेस और उनके कार्यान्वयन वर्गों का नाम कैसे देते हैं?भंडार और सेवा इंटरफेस का नाम कैसे बदलें?

उदाहरण के लिए मेरे पास Question नाम वाला मॉडल है। आप भंडार (इंटरफ़ेस और कार्यान्वयन) और सेवा (इंटरफेस/कार्यान्वयन) का नाम क्या करेंगे।

इन पदों को पढ़ने के बाद: Java Interfaces/Implementation naming convention और Interface naming in Java मैं फिर से विचार मैं पहले से ही क्या किया था :)

उत्तर

7

मुझे लगता है कि डीडीडी में नामकरण करने के लगभग दो दृष्टिकोण हैं:

1) स्टीरियोटाइप आधारित। यह वह जगह है जहां आप इसके नाम पर कक्षा स्टीरियोटाइप शामिल करते हैं। उदाहरण के लिए:

QuestionsRepository, TaxCalculatingService etc 

2) डोमेन आधारित। इस दृष्टिकोण में आप केवल डोमेन भाषा का उपयोग करते हैं और कक्षा के नामों में किसी भी रूढ़िवाद को छोड़ देते हैं। उदाहरण के लिए:

Questions (or AllQuestions), TaxCalculator etc. 

कार्यान्वयन कक्षाएं SqlQuestions या InMemoryQuestions की तरह नामित किया जाएगा।

मैंने दोनों की कोशिश की लेकिन अब मैं दूसरा विकल्प पसंद करता हूं क्योंकि ऐसा लगता है कि यह डीडीडी मानसिकता के साथ अधिक गठबंधन है। यह अधिक पठनीय लगता है और बेहतर सिग्नल-टू-शोर अनुपात है। बाद फिल Calçado से खजाने पर एक great article से एक उद्धरण है:

वस्तुओं की एक सूची के रूप में एक भंडार की अवधारणा को समझना बहुत कठिन नहीं है लेकिन यह बहुत आम है उन वर्गों तरीके हैं कि अंत करने के लिए सूचियों से संबंधित नहीं है।

एक सर्वव्यापी भाषा और संबंधित पैटर्न को अपनाने में कई टीमों को प्रशिक्षित करने के बाद, मुझे पता चला है कि लोगों को याद रखने का सबसे अच्छा तरीका है कि रेपॉजिटरीज डीएओ जैसी कक्षाएं नहीं हैं, आप उन्हें कैसे नाम देते हैं।

साल पहले रॉड्रिगो योशिमा ने मुझे रेपॉजिटरीज़ नामकरण करते समय अपने सम्मेलन के बारे में बताया। इसके बजाय अधिक आम नामकरण शैली के नीचे प्रदर्शित:

class OrderRepository { 
    List<Order> getOrdersFor(Account a){...} 
} 

वह इस को बढ़ावा देता है:

class AllOrders { 
    List<Order> belongingTo(Account a){...} 
} 

यह एक छोटा सा परिवर्तन की तरह दिखता है, लेकिन यह एक बहुत मदद करता है ...

पूरा लेख पढ़ने और बुकमार्क करने के लायक है।

+0

मुझे पता है कि यह मामूली जानकारी हो सकती है लेकिन क्या कार्यान्वयन वर्ग में प्रत्यय या उपसर्ग होना चाहिए? SQLAllQuestions या AllQuestionsSQL? आप क्या करना चाहते हैं? – LuckyLuke

+0

मैं व्यक्तिगत रूप से SqlAllQuestions का उपयोग करता हूं, लेकिन मुझे AllQuestionsSql का उपयोग न करने का कोई कारण नहीं दिखता है, यह भी बेहतर हो सकता है। जैसा कि आप कह यह वास्तव में है क्योंकि इस नाम ही अपने आवेदन के लिए एक 'संरचना रूट' भाग में इस्तेमाल किया जाएगा और आप इसे एक बहुत नहीं देख पा रहे हैं कोई फर्क नहीं पड़ता (http://blog.ploeh.dk/2011/07/28/ CompositionRoot.aspx) – Dmitry

+0

एक और बात। मैंने आपका लिंक पढ़ा और यह बहुत अच्छा था लेकिन जब आप AllQuestions इंटरफ़ेस रखते हैं तो आप क्या करते हैं और आप सभी प्रश्नों को सूचीबद्ध करना चाहते हैं? AllQuestions.everything()? क्या सीआरयूडी करते समय कोई सम्मेलन या कुछ है? – LuckyLuke

2

मैं व्यक्तिगत रूप से FooService, FooServiceImpl, FooRepository और FooRepositoryImpl का उपयोग करें।

आप तर्क दे सकते हैं कि Impl प्रत्यय शोर है, लेकिन

  • वहाँ आम तौर पर केवल एक कार्यान्वयन है, तो वहाँ कोई FirstFooService और SecondFooService
  • ठोस FooXxxImpl प्रकार इकाई परीक्षण में छोड़कर कोड में कहीं नहीं उपयोग किया जाता है है : निर्भरता इंजेक्शन दी जाती है, और उनका प्रकार इंटरफ़ेस
+0

मैं उपयोग 'बजाय FooDao'' FooRepository' क्योंकि यह टाइप करने के लिए :) – Paul

+0

छोटा है मैं FooService इंटरफेस के लिए की जरूरत है के बाद से आप केवल एक कार्यान्वयन है नहीं दिख रहा। इंटरफ़ेस का उद्देश्य ऑब्जेक्ट/घटक मॉडल करना है जिसमें अधिक कार्यान्वयन होंगे। जैसे सत्यापन नियम, कुछ रणनीति पैटर्न। मैं व्यक्तिगत रूप से सोचता हूं कि बहुत सारे इंटरफेस ओवरयूज हैं। इसके अलावा, तथ्य यह है कि आपके आईपीएल सुफिक्स के रूप में आपके कार्यान्वयन के बारे में मुझे बताया गया है कि आपका कार्यान्वयन किसी भी तरह विशिष्ट नहीं है। कार्यान्वयन नाम में कार्यान्वयन विनिर्देश होना चाहिए। उदाहरण के लिए, सूची, लिंक्डलिस्ट, ऐरेलिस्ट। मुझे पता है कि यह दृष्टिकोण आम है, लेकिन इसका मतलब यह नहीं है कि यह अच्छा है। – Vajda

+0

अब मैं इंटरफेस का उपयोग नहीं करता हूं। याद रखें कि यह 2012 से एक जवाब है। तब से ढांचे और नकली ढांचे का विकास हुआ है। –

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

  • कोई संबंधित समस्या नहीं^_^