मॉडल के बारे में कितना जानना चाहिए?


10

मैं python में WPF के लिए अजगर आवरण और DAG समर्थन के साथ एक एप्लिकेशन बना रहा हूं। मैं वर्तमान में एक ऐसे बिंदु पर हूं जहां मुझे डेटा और दृश्य के बीच बातचीत का एक सुसंगत तरीका तय करना है।

जहाँ तक मैं देख रहा हूँ वर्तमान में दो स्पष्ट समाधान हैं।

पहले एक के समान है कि एंड्रॉइड एप्लिकेशन कैसे संरचित हैं। आपके पास एक नियंत्रक है जो दृश्य को सेट / पॉप्युलेट करता है। इसलिए नियंत्रक दृश्य का मालिक है और केवल उस आदिम डेटा को धक्का देता है जो प्रदर्शित किया जाएगा। यह दृश्य केवल एक गूंगा परत है और इस बात का कोई पता नहीं है कि क्या हो रहा है और वह डेटा कहां से है। और फिर अगर उपयोगकर्ता दृश्य के साथ बातचीत करता है, तो यह नियंत्रक को कॉलबैक भेज देगा (यदि यह पंजीकृत है)।

UserInfoController.py

userInfoView = UserInfoView()
userInfoView.onGenderChangedCallback = self.onGenderChangedCallback 
userInfoView.setUserGenderValue(user.getGender())

UserInfoView.py

def setUserGenderValue(self, gender):
    self.userGender = gender

def getView(self):
    return ui.Label(self.userGender, onEditCallback=self.onGenderChangedCallback)

दूसरा एक दृश्य के लिए (संदर्भ) मॉडल पारित कर रहा है और डेटा को पुनर्प्राप्त करने और अद्यतन करने के लिए दृश्य को दे रहा है। दृश्य में अब मॉडल शामिल है और इसलिए यह नियंत्रक को बिना किसी अतिरिक्त कॉलबैक के इसे अपडेट कर सकता है।

UserInfoViewModel.py

self.gender = 'Male'

UserInfoView.py

def getView(self):
    return ui.Label(self.ViewModel().getGender(), onEdited=self.genderEdited)

def genderEdited(self, newValue):
    self.ViewModel().setGender(newValue)

इसलिए मुझे लगता है कि मैं जो पूछ रहा हूं, क्या मुझे बहुत ही आदिम डेटा पास करना चाहिए और दृश्य को यथासंभव सामान्य रखना चाहिए, फिर कॉलबैक के साथ काम करना चाहिए और नियंत्रक में व्यवसाय की बारीकियों को करना चाहिए।

या क्या मुझे पूरे मॉडल को दृश्य में पास करना चाहिए और दृश्य को सीधे मॉडल को अपडेट करने देना चाहिए। इसका मतलब है कि टाइप करने के लिए कम कोड होंगे।

पुनश्च। कोड को न देखें - यह सिर्फ विज़ुअलाइज़ेशन के लिए है।

संपादित करें:

साथ ही जोड़ने के लिए - इस एप्लिकेशन को अजगर में लिखा जाएगा जो डकपिपिंग का समर्थन करता है। इसका मतलब यह है कि दूसरे दृष्टिकोण के साथ, दृश्य अभी भी पुन: प्रयोज्य है जब तक कि मॉडल आवश्यक इंटरफ़ेस को पूरा नहीं करता है।

जवाबों:


3

एक दृश्य में केवल "तर्क" होना चाहिए, उपयोगकर्ता के लिए GUI की दृश्यमान स्थिति को बदलने के लिए जिम्मेदार कोड होना चाहिए। कोई भी कोड जो डेटा में हेरफेर करता है या मान की गणना करता है, उसे कहीं और नियंत्रित किया जाना चाहिए।

आपके विचार से पता होना चाहिए कि मॉडल कैसा दिखता है, लेकिन मॉडल को उजागर करने वाली किसी भी चीज से जुड़े व्यवहार से अनभिज्ञ होना चाहिए।

सरल डेटा प्रकारों को अपने दृश्य में पास करना, जीयूआई में हेरफेर करने और दृश्य स्थिति को संग्रहीत करने के लिए दोनों को जिम्मेदार बनाता है, जो आसानी से अनिर्दिष्ट हो सकता है।

यदि मॉडल को दृश्य द्वारा हेरफेर के लिए बनाया गया है, तो आपको सीधे मॉडल को पास करना चाहिए। यदि आपका मॉडल आपके डेटा संग्रहण तंत्र द्वारा उपयोग किया जाने वाला एक ही है, तो यदि आपके आंतरिक प्रतिनिधित्व और दृश्य प्रतिनिधित्व में परिवर्तन (जैसा कि अक्सर होता है) सड़क के नीचे समस्याएं पैदा कर सकता है।

मूल रूप से, आपके पास व्यावसायिक तर्क को संभालने के लिए बस एक दृश्य, मॉडल, डेटा मॉडल और कुछ होना चाहिए। फिर आपकी सभी चिंताएं आसानी से अलग हो जाती हैं, आपको बस उन्हें एक साथ गोंद देना है।


1

यह कुछ हद तक एक सामान्यीकृत उत्तर है, लेकिन IMO दृश्य को कम से कम काम संभव होना चाहिए (जैसे उपयोगकर्ता इनपुट को मान्य करें)।

इस तरह से आप अपने सभी तर्क नियंत्रक से होने की उम्मीद कर सकते हैं। इससे सड़क, एकल जिम्मेदारी सिद्धांत और उस सभी को बनाए रखना बहुत आसान हो जाता है।


खैर दूसरे दृष्टिकोण में तर्क अभी भी दृश्य-मॉडल में होगा और दृश्य में नहीं।
आर्टर्स वैंकेन्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.