मैं ज्यादातर Dime के जवाब से सहमत हूं कि आप अपने मॉडल को प्रति व्यावसायिक ऑब्जेक्ट बनाना चाहते हैं - जिन समस्याओं को हल करने की कोशिश कर रहा है, उन्हें ड्राइव करना चाहिए कि आप मॉडल कक्षाएं कैसे बनाते हैं। व्यवहार में, मैंने पाया है कि प्रति तालिका एक मॉडल बनाना शुरू करने के लिए एक अच्छी जगह है। एक उचित रूप से डिज़ाइन किए गए स्कीमा को उन व्यावसायिक प्रक्रियाओं की नकल करने की संभावना है जो आपको आवेदन कोड में मॉडल करने की आवश्यकता है - जिसे डोमेन मॉडल भी कहा जाता है।
ऑब्जेक्ट / रिलेशनल मैपिंग लेयर का उपयोग करना उपयोगी होता है, इसलिए आपके डोमेन मॉडल में डेटा स्कीम लेयर की पुनरावृत्ति कॉल की आवश्यकता के बिना डेटाबेस स्कीमा के समान ही संबंध होते हैं। की जाँच करें सुवक्ता एक उदाहरण के रूप PHP के लिए। स्कीमा और डोमेन मॉडल दोनों को व्यावसायिक प्रक्रियाओं का समर्थन करने के लिए डिज़ाइन किया जाना चाहिए।
यह मार्जन वेनमा के उत्तर के पहले भाग की ओर जाता है:
मैं कहता हूं कि प्रति तालिका एक मॉडल सिर्फ एक वर्ग संरचना में आपके डेटाबेस को फिर से बना रहा है। इसे एनीमिक मॉडल के रूप में जाना जाता है और इसे एक एंटी-पैटर्न माना जाता है।
एक एनीमिक डोमेन मॉडल एक विरोधी पैटर्न है। वेनेमा का सुझाव है कि एक "मॉडल प्रति तालिका" को "अपने डेटाबेस को फिर से बनाना" के रूप में देखा जा सकता है, हालांकि यह कहना बिल्कुल गलत है कि यह एक एनीमिक डोमेन मॉडल है।
मार्टिन फॉलर से:
एनीमिक डोमेन मॉडल का मूल लक्षण यह है कि पहली बार में यह वास्तविक चीज़ जैसा दिखता है। डोमेन स्पेस में संज्ञाओं के नाम पर कई ऑब्जेक्ट्स हैं, और ये ऑब्जेक्ट उन समृद्ध रिश्तों और संरचना से जुड़े हुए हैं जो सच्चे डोमेन मॉडल हैं। पकड़ तब आती है जब आप व्यवहार को देखते हैं, और आपको पता चलता है कि इन वस्तुओं पर शायद ही कोई व्यवहार होता है, जिससे वे गेटर्स और बसने वालों की तुलना में थोड़ा अधिक हो जाते हैं।
(जोर, मेरा)
एनीमिक डोमेन मॉडल का मुख्य कारक डोमेन मॉडल कक्षाओं पर व्यवहार या विधियों की कमी है।
ऐसा इसलिए है क्योंकि कक्षाओं का उद्देश्य डेटा और व्यवहार दोनों हैं। यदि आप अपने मॉडलों को एक ही टेबल पर सीमित रखते हैं, तो आप कोड (व्यवहार) को कहां रखते हैं, जिसमें कई तालिकाओं से डेटा और व्यवहार से निपटने की आवश्यकता है?
फिर से, आप अपने डोमेन मॉडल में व्यवहार कर सकते हैं, और करना चाहिए, भले ही वे केवल एक तालिका में मैप करें। व्यवहार जो कई तालिकाओं को प्रभावित करता है वास्तव में कई वस्तुओं को प्रभावित करता है जो कई तालिकाओं को मैप करने के लिए होता है। डोमेन ड्रिवेन डिज़ाइन ठीक उसी समस्या के लिए एक दृष्टिकोण है जिसका उल्लेख वेनेमा ने किया: "आपने कोड (व्यवहार) को कहां रखा है जिसमें कई तालिकाओं से डेटा और व्यवहार से निपटने की आवश्यकता है?"
और इसका जवाब एक एग्रिगेट रूट है । मार्टिन फाउलर कहते हैं:
एग्रीगेट डोमेन-ड्रिवेन डिज़ाइन में एक पैटर्न है। डीडीडी एग्रीगेट , डोमेन ऑब्जेक्ट्स का एक क्लस्टर होता है जिसे सिंगल यूनिट माना जा सकता है। एक उदाहरण एक ऑर्डर और इसकी लाइन-आइटम हो सकता है, ये अलग-अलग ऑब्जेक्ट होंगे, लेकिन ऑर्डर को (इसकी लाइन आइटम के साथ) एक एकल के रूप में व्यवहार करना उपयोगी है।
(जोर, मेरा)
एक "डोमेन ऑब्जेक्ट्स का क्लस्टर" को "डोमेन मॉडल के रूप में भी देखा जा सकता है जो कई टेबल पर मैप करता है।" व्यवहार जो कई तालिकाओं को प्रभावित करता है, उसे एग्लगेट रूट पर परिभाषित किया जाना चाहिए - एक ऐसा वर्ग जो "तालिका" को अलग करता है जो कई तालिकाओं या वस्तुओं को प्रभावित करता है:
फिर से, मार्टिन फाउलर से:
एक समुच्चय में अक्सर साधारण क्षेत्रों के साथ, पारस्परिक संग्रह शामिल होंगे।
ओपी के मूल प्रश्न का उत्तर देने के लिए:
... एक डेटाबेस प्रति डेटाबेस तालिका बनाना अच्छा अभ्यास माना जाएगा? इस तरह तरीके दो बार नहीं लिखे गए हैं।
मैं कहूंगा कि यह शुरू करने के लिए एक अच्छी जगह है, लेकिन इस बात का ध्यान रखें कि आपके स्कीमा और ऑब्जेक्ट मॉडल को 100% मैच नहीं करना है। ऑब्जेक्ट मॉडल को व्यावसायिक नियमों को लागू करने और लागू करने के साथ अधिक चिंतित होना चाहिए। स्कीमा को व्यापार डेटा को मॉड्यूलर और स्केलेबल तरीके से संग्रहीत करने पर अधिक केंद्रित होना चाहिए।
नियंत्रक प्रति एक मॉडल अच्छा अभ्यास नहीं होगा, हालांकि वहाँ एक दृश्य मॉडल कहा जाता मॉडल की भिन्नता यह है कि करता है नियंत्रक परत में फिट। एक दृश्य मॉडल एक निश्चित प्रकार के प्रदर्शन को फिट करने के लिए डोमेन मॉडल का पुनर्गठन है, यह एक वेब पेज या GUI अनुप्रयोग में रूप है।