यहाँ एक सरल आवश्यकता है:
उपयोगकर्ता
Question
कईAnswer
एस के साथ बनाता है ।Question
कम से कम एक होना चाहिएAnswer
।स्पष्टता: सोचें
Question
औरAnswer
एक परीक्षण के रूप में : एक सवाल है, लेकिन कई उत्तर, जहां कुछ सही हो सकते हैं। उपयोगकर्ता वह अभिनेता है जो इस परीक्षा की तैयारी कर रहा है, इसलिए वह प्रश्न और उत्तर बनाता है।
मैं इस सरल उदाहरण को 1 में मॉडल करने की कोशिश कर रहा हूं) वास्तविक जीवन मॉडल 2 से मिलान करें) कोड के साथ अभिव्यंजक होने के लिए, ताकि संभावित दुरुपयोग और त्रुटियों को कम करने के लिए, और डेवलपर्स को संकेत दें कि मॉडल का उपयोग कैसे करें।
प्रश्न एक इकाई है , जबकि उत्तर मूल्य वस्तु है । प्रश्न उत्तर रखता है। अब तक, मेरे पास ये संभव उपाय हैं।
[ए] कारखाने के अंदरQuestion
Answer
मैन्युअल बनाने के बजाय , हम कॉल कर सकते हैं:
Answer answer = question.createAnswer()
answer.setText("");
...
यह एक जवाब पैदा करेगा और इसे प्रश्न में जोड़ देगा। फिर हम गुणों को सेट करके उत्तर को हेरफेर कर सकते हैं। इस तरह, केवल प्रश्न एक उत्तर को क्रेट कर सकते हैं। इसके अलावा, हम बिना सवाल के जवाब देने से रोकते हैं। फिर भी, हमारे पास उत्तर बनाने पर नियंत्रण नहीं है, क्योंकि इसमें हार्डकोड है Question
।
उपरोक्त कोड की 'भाषा' के साथ एक समस्या यह भी है। उपयोगकर्ता वह है जो उत्तर बनाता है, प्रश्न नहीं। व्यक्तिगत रूप से, मुझे पसंद नहीं है कि हम वैल्यू ऑब्जेक्ट बनाएं और डेवलपर पर निर्भर करते हुए इसे मूल्यों से भरें - कैसे वह यह सुनिश्चित कर सकता है कि क्या जोड़ना आवश्यक है?
[ख] प्रश्न के अंदर का कारखाना, # २ लें
कुछ का कहना है कि हमारे पास इस तरह की विधि होनी चाहिए Question
:
question.addAnswer(String answer, boolean correct, int level....);
उपरोक्त समाधान के समान, यह विधि उत्तर के लिए अनिवार्य डेटा लेती है और एक बनाता है जिसे प्रश्न में भी जोड़ा जाएगा।
यहाँ समस्या यह है कि हम बिना किसी अच्छे कारण के निर्माणकर्ता की नकल करते हैं Answer
। इसके अलावा, क्या प्रश्न वास्तव में एक उत्तर बनाता है?
[सी] कंस्ट्रक्टर निर्भरता
आइए अपने स्वयं के द्वारा दोनों वस्तुओं को बनाने के लिए स्वतंत्र रहें। आइए, निर्माता पर निर्भरता के अधिकार को भी व्यक्त करें:
Question q = new Question(...);
Answer a = new Answer(q, ...); // answer can't exist without a question
यह डेवलपर को संकेत देता है, क्योंकि बिना प्रश्न के उत्तर नहीं बनाया जा सकता है। हालाँकि, हम उस 'भाषा' को नहीं देखते हैं जो कहती है कि प्रश्न का उत्तर 'जोड़ा' गया है। दूसरी ओर, क्या हमें वास्तव में इसे देखने की आवश्यकता है?
[डी] कंस्ट्रक्टर निर्भरता, # 2 लें
हम इसके विपरीत कर सकते हैं:
Answer a1 = new Answer("",...);
Answer a2 = new Answer("",...);
Question q = new Question("", a1, a2);
यह ऊपर की विपरीत स्थिति है। यहाँ प्रश्न के बिना उत्तर मौजूद हो सकते हैं (जिसका कोई मतलब नहीं है), लेकिन प्रश्न बिना उत्तर के मौजूद नहीं हो सकता (जो समझ में आता है)। साथ ही, यहाँ 'भाषा' उस प्रश्न पर अधिक स्पष्ट है जिसके उत्तर होंगे।
[ई] आम रास्ता
इसे मैं सामान्य तरीका कहता हूं, पहली बात जो पीपीएल आमतौर पर करता है:
Question q = new Question("",...);
Answer a = new Answer("",...);
q.addAnswer(a);
जो दो उत्तरों के ऊपर 'ढीला' संस्करण है, क्योंकि उत्तर और प्रश्न दोनों एक दूसरे के बिना मौजूद हो सकते हैं। कोई विशेष संकेत आपको लगता है कि है है उन्हें एक साथ बाध्य करने के लिए।
[एफ] संयुक्त
या क्या मुझे सी, डी, ई - सभी तरीकों को शामिल करना चाहिए कि कैसे संबंध बनाए जा सकते हैं, इसलिए डेवलपर्स को उनके लिए जो भी सबसे अच्छा है उसका उपयोग करने में मदद करें।
सवाल
मुझे पता है कि लोग 'कूबड़' के आधार पर उपरोक्त उत्तरों में से एक का चयन कर सकते हैं। लेकिन मुझे आश्चर्य है कि यदि उपरोक्त संस्करण में से कोई भी बेहतर है, तो उसके लिए एक अच्छा कारण है। इसके अलावा, कृपया उपरोक्त प्रश्न के अंदर न सोचें, मैं यहां कुछ सर्वोत्तम प्रथाओं को निचोड़ना चाहूंगा जिन्हें अधिकांश मामलों पर लागू किया जा सकता है - और यदि आप सहमत हैं, तो कुछ संस्थाओं के निर्माण के अधिकांश उपयोग मामले समान हैं। इसके अलावा, यहाँ प्रौद्योगिकी अज्ञेय हो सकता है, जैसे। मैं यह नहीं सोचना चाहता कि ORM का उपयोग होने जा रहा है या नहीं। बस अच्छा, अभिव्यंजक मोड चाहते हैं।
इस पर कोई ज्ञान?
संपादित करें
अन्य गुणों की उपेक्षा करें Question
और Answer
, वे प्रश्न के लिए प्रासंगिक नहीं हैं। मैंने पाठ के ऊपर संपादन किया और अधिकांश कंस्ट्रक्टर (जहां आवश्यक हो) को बदल दिया: अब वे आवश्यक संपत्ति मूल्यों में से किसी को भी स्वीकार करते हैं। यह सिर्फ एक प्रश्न स्ट्रिंग, या विभिन्न भाषाओं, स्थितियों आदि में स्ट्रिंग का नक्शा हो सकता है - जो भी गुण पारित किए जाते हैं, वे इसके लिए ध्यान केंद्रित नहीं कर रहे हैं;) तो बस यह मान लें कि हम आवश्यक मापदंडों से ऊपर हैं, जब तक कि अलग-अलग नहीं कहा जाता है। Thanx!