2011-06-21 15 views
13

से डोमेन कक्षाओं को डीकॉप्लिंग करना, इसलिए मैंने अपना ओओ विश्लेषण और एक वेब एप्लिकेशन का डिज़ाइन पूरा कर लिया है जिसे मैं बना रहा हूं और अब कार्यान्वयन में हूं। पाइथन और वेब विकास ढांचे Django का उपयोग कर सिस्टम को लागू करने के लिए डिजाइन निर्णय किए गए हैं।Django मॉडल क्लासेस

मैं अपने कुछ डोमेन इकाई वर्गों को लागू करना शुरू करना चाहता हूं जिन्हें दृढ़ता की आवश्यकता है। ऐसा लगता है कि Django मुझे उन वर्गों के रूप में लागू करेगा जो Django मॉडल वर्ग से विरासत में हैं, ताकि दृढ़ता के लिए Django ORM का उपयोग किया जा सके। हालांकि, यह मेरी कक्षा इकाइयों और दृढ़ता तंत्र के बीच बहुत मजबूत युग्मन की तरह लगता है। क्या होता है यदि कुछ चरण में मैं Django को कुचलना चाहता हूं और एक और वेब विकास ढांचे का उपयोग करना चाहता हूं, या सिर्फ एक विकल्प के लिए डीजेगो के ओआरएम को डुबो देना चाहता हूं? अब मुझे स्क्रैच से अपनी डोमेन इकाई कक्षाओं को दोबारा लिखना है।

तो मेरे डोमेन वर्गों को स्टैंडअलोन पायथन कक्षाओं के रूप में कार्यान्वित करना बेहतर होगा, इन सभी में मेरे सभी व्यावसायिक तर्कों को समाहित करना होगा, और उसके बाद कुछ तंत्र (पुल या एडाप्टर या ???) जैसे डिजाइन पैटर्न का उपयोग निरंतर भंडारण का प्रतिनिधि Django ORM के लिए ये डोमेन क्लासेस, उदाहरण के लिए एक Django मॉडल क्लास के माध्यम से जिसे उचित रूप से स्थापित किया गया है।

क्या किसी के पास यह करने के बारे में सुझाव है? ऐसा लगता है कि मैंने पढ़ा है कि लोग बस अपने डोमेन कक्षाओं को Django मॉडल वर्ग से विरासत में प्राप्त कक्षाओं के रूप में लागू करते हैं और इस वर्ग के भीतर व्यापार तर्क मिश्रित करते हैं। यह नीचे लाइन परिवर्तन, रखरखाव, पुन: प्रयोज्यता आदि के लिए एक अच्छा विचार प्रतीत नहीं होता है

उत्तर

3

ठीक है, Django के साथ जाने का तरीका Django के बेस मॉडल वर्गों से प्राप्त होना है। यह 'सक्रिय रिकॉर्ड' पैटर्न है। आपके django मॉडल में आपके साथ व्यापार तर्क के साथ सभी सीआरयूडी और क्वेरी विधियां होंगी (यदि आप इसे निश्चित रूप से जोड़ने का निर्णय लेते हैं)। इसे जावा दुनिया में एक विरोधी पैटर्न के रूप में देखा जाता है, लेकिन इसके बारे में अच्छी बात यह है कि यह वास्तव में विकास को तेज़ कर सकता है।

4

क्या आप गंभीरता से देख सकते हैं कि आप केवल Django ORM को कुचलने जा रहे हैं, लेकिन बाकी सब कुछ रखें? या यदि आपने Django को पूरी तरह से हटा दिया है, तो आपके कोड का कोई भी अभी भी लागू होगा?

आप शिकायत नहीं करते हैं कि अगर आपने Django को हटा दिया है, तो आपको अपने सभी टेम्पलेट्स को फिर से लिखना होगा। बेशक आप करेंगे, इसकी उम्मीद है। तो प्रस्तुति परत के ढांचे के साथ बाध्य होना ठीक क्यों है, लेकिन दृढ़ता परत नहीं?

इस प्रकार के ऊपर-सामने ओवर-विश्लेषण से बचा जाना चाहिए। Django एक आरएडी उपकरण है, और त्वरित, पुनरावृत्ति विकास के लिए सबसे उपयुक्त है। इसके लिए, यह कुछ शक्तिशाली, लंबे समय तक रहने वाले अनुप्रयोगों को बनाने में सक्षम है, क्योंकि बड़ी कंपनियों की गवाही दी जाएगी। लेकिन यह जावा नहीं है, और यह "enterprisey" नहीं है, और यह विशेष रूप से ओओ सिद्धांतों के अनुरूप नहीं है। पायथन दुनिया में, यह एक विशेषता के रूप में देखा जाता है, एक बग नहीं।

+1

सफल होने के लिए यदि आप के बारे में बताया क्यों यह एक ऐसी सुविधा के बजाय एक बग होगा यह एक बेहतर जवाब होगा पोस्ट करेंगे। मुझे पाइथन पसंद है, लेकिन विभिन्न अवधारणाओं के Django के conflation हमेशा एक जीत नहीं है। – AdamC

0

यदि आप एक अलग दृढ़ता तंत्र चाहते हैं तो आपको "अपने मॉडल को खरोंच से फिर से लिखना" नहीं होगा। एक सक्रियरेकॉर्ड-शैली दृढ़ता प्रणाली का पूरा बिंदु यह है कि यह मॉडल वर्गों पर न्यूनतम बाधा लगाता है, और बड़े पैमाने पर पारदर्शी रूप से कार्य करता है।

यदि आप वास्तव में चिंतित हैं, तो किसी भी कोड को सारणी दें जो अपने स्वयं के तरीकों से प्रश्नों पर निर्भर करता है।

-1

मुझे लगता है कि Django मॉडल और डोमेन कक्षाओं को decoupling के लिए कोई कार्यान्वित समाधान नहीं है, कम से कम मुझे कोई नहीं मिला है। असल में, मुझे लगता है कि इस तरह के decoupling के साथ एकमात्र ओआरएम केवल Smalltalk दुनिया में मौजूद है और इसे GLORP कहा जाता है। यह आपको डोमेन क्लास को संशोधित किए बिना एक संबंधित डीबी में अपने डोमेन मॉडल को जारी रखने की अनुमति देता है। मैं वर्तमान में Django ORM से decouple करने के लिए समान विचारों को लागू करने की कोशिश कर रहा हूं।मेरी प्रेरणा है कि डीबी टेबल और डोमेन वर्गों के बीच वर्तमान मजबूत युग्मन बुरी तरह से सॉफ्टवेयर विकास दर्द होता है। मैं फिर से अगर मैं :)