django में व्यावसायिक तर्क और डेटा एक्सेस को अलग करना

| | | | | | | | | | | | | | | | | |

मैं Django में एक प्रोजेक्ट लिख रहा हूं और मैं देख रहा हूं कि 80% कोड models.py फाइल में है। यह कोड भ्रमित करने वाला है और, एक निश्चित समय के बाद, मुझे समझ में नहीं आता कि वास्तव में क्या हो रहा है।

यहाँ वह है जो मुझे परेशान करता है:

  1. मुझे यह बदसूरत लगता है कि मेरा मॉडल स्तर (जिसे केवल डेटाबेस से डेटा के साथ काम के लिए जिम्मेदार माना जाता था) भी ईमेल भेज रहा है, अन्य सेवाओं के लिए एपीआई पर चल रहा है, आदि।
  2. इसके अलावा, मुझे व्यावसायिक तर्क को इसमें रखना अस्वीकार्य है दृश्य, क्योंकि इस तरह इसे नियंत्रित करना मुश्किल हो जाता है। उदाहरण के लिए, मेरे आवेदन में उपयोगकर्ता के नए उदाहरण बनाने के कम से कम तीन तरीके हैं, लेकिन तकनीकी रूप से इसे समान रूप से बनाना चाहिए।
  3. मैं हमेशा ध्यान नहीं देता कि कब विधियां और मेरे मॉडल के गुण गैर-नियतात्मक हो जाते हैं और जब वे दुष्प्रभाव विकसित करते हैं।

यहां एक सरल उदाहरण दिया गया है। सबसे पहले, उपयोगकर्ता मॉडल इस तरह था:

वर्ग उपयोगकर्ता(db.Models): def get_present_name(self): return self.name या "Anonymous" def सक्रिय (स्वयं): self.status = "सक्रिय" self.save() 

समय के साथ, यह इस में बदल गया:

वर्ग उपयोगकर्ता(db .मॉडल): def get_present_name(self): # संपत्ति डेटाबेस के संदर्भ में गैर-नियतात्मक बन गई # डेटा api द्वारा किसी अन्य सेवा से लिया गया है remote_api.request_user_name(self.uid) या "Anonymous" def सक्रिय (स्वयं): # विधि अब एक साइड इफेक्ट है (उपयोगकर्ता को संदेश भेजें) self.status = "सक्रिय" self.save() send_mail ("आपका खाता सक्रिय है!", "‚Ķ", [self.email]) 

मैं अपने कोड में इकाइयों को अलग करना चाहता हूं:

  1. मेरे डेटाबेस की इकाइयां, दृढ़ता स्तर: मेरा एप्लिकेशन कौन सा डेटा रखता है?
  2. मेरे आवेदन की इकाइयां, व्यावसायिक तर्क स्तर: मेरा आवेदन क्या करता है?

ऐसे एक को लागू करने के लिए अच्छे अभ्यास क्या हैं? n दृष्टिकोण जिसे Django में लागू किया जा सकता है?