2010-10-01 16 views
5

दोस्तों, मैं एक आवेदन, एक सीडी कंटेनर सीडी डालने के लिए के लिए एक जीयूआई प्रोग्रामिंग कर रहा हूँ, और वर्तमान में मैं बहुत स्पष्ट नहीं कर रहा हूँ और मुझे लगता है कि मैं कुछ मदद की जरूरत है के बारे में वस्तु उन्मुख डिजाइन मेरी समझ स्पष्ट करने के लिए ।वस्तु उन्मुख डिजाइन सवाल

हां, तो पहले, मैं पर्यवेक्षक पैटर्न का उपयोग सार मॉडल और देखें वर्गों और भी ठोस मॉडल (सीडी कंटेनर) और ठोस विचारों (सीडी कंटेनर देखें) बनाने के लिए। तब मैं wxwidget ढांचे का उपयोग करने के लिए डिजाइन करने के लिए और चित्रमय उपस्थिति या लेआउट (CDContainerWidget, wxPanel से) सीडी कंटेनर और अन्य जीयूआई नियंत्रण मेनफ्रेम (wxFrame से), आदि के लिए ..

तो अब मैं तीन वर्गों है शुरू: CDContainerModel (सीडी कंटेनर), CDContainerView (पर्यवेक्षक पैटर्न के लिए कक्षा), और CDContainerWidget (गुई नियंत्रण)। तो मैं CDContainerView और CDContainerWidget के साथ मुझे क्या करना चाहिए इसके बारे में स्पष्ट नहीं हूं?

मुझे लगता है कि CDContainerWidget और CDContainerView दोनों CDContainerModel की जरूरत है। मैं के बारे में चार दृष्टिकोण लगता है, लेकिन जो एक approriate है पता नहीं है:

1)। सहयोगी CDContainer एक सदस्य चर के रूप में CDContainerView में विजिट करें, फिर सीडीकॉन्टेनर व्यू को मुख्य फ्रेम में सदस्य चर के रूप में रखें।

class CDContainerView: 
    def __init__: 
    self.gui=CDContainerWidget 

class MainFrame: 
    def __init__: 
    CDContainerView 

2)। सीडीकॉन्टेनर व्यू उपclass सीडीकॉन्टेनरविजेट:

class CDContainerView(CDContainerWidget): 

class MainFrame: 

    def __init__: 

    CDContainerView 

3)। CDContainerWidget उपवर्ग CDContainerView:

class CDContainerWidget(CDContainerView): 

class MainFrame: 
    def __init__: 
    CDContainerWidget 

4)। बजाय CDContainerWidget और CDContainerView का उपयोग कर के, केवल एक ही वर्ग CDContainerBig जो अमूर्त वर्ग देखें उपवर्ग और wxPanel का उपयोग

class CDContainerBig(View, wxPanel) 

मेरा प्रश्न है सही समाधान क्या है? मैंने एमवीसी पैटर्न के विकी पेज को पढ़ा है, लेकिन मैं वास्तव में इसके अवरोध को समझ नहीं पा रहा हूं और यह नहीं जानता कि यह कैसे और आश्चर्य भी है कि यह मेरी समस्या पर लागू करने के लिए अनुमोदित है या नहीं।

अच्छी तरह से, मैं कुछ अतिरिक्त टिप्पणियाँ डाल दिया। मूल रूप से, जब मैं प्रोग्राम में डिजाइन करना शुरू करता हूं, तो मैंने बहुत कुछ नहीं सोचा और बस चुनें, 2) दृष्टिकोण। लेकिन अब, मुझे लगता है 3) अच्छा है। चूंकि विजेट में विजेट डालना उचित है (CDContainerWidget MainFrame में)। लेकिन मुझे सच में यकीन नहीं है। यह पर्यवेक्षक पैटर्न के साथ भी लगता है, तीन वर्ग मोड़ और अजीब हैं। और कभी-कभी, मुझे लगता है कि ये 4 शायद वही हैं, बस कौन शामिल है, या कौन संदेश भेजता है। अच्छा, मुझे लगता है कि मुझे वास्तव में इस बिंदु पर स्पष्टीकरण की आवश्यकता है।

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

धन्यवाद !!

+0

अपने खुद के प्रश्न पर कभी टिप्पणी न करें। कभी नहीँ। कृपया ** अपना प्रश्न पूरा होने के लिए ** अपडेट करें। फिर, ** अपडेट ** के बाद, कृपया भ्रमित टिप्पणियों को हटा दें। अपने प्रश्न पर कभी टिप्पणी न करें। –

उत्तर

1

क्या यह थोड़ा आसान आप डाला के लिए वर्गों के बीच युग्मन Spiff Signal, या अन्य संकेत/स्लॉट उपलब्ध मॉड्यूल में से एक की तरह कुछ के साथ एक संकेत स्लॉट पैटर्न को लागू करने की जाएगी बना सकता है।

संचार तर्क को डीकॉप्लिंग करके आप सीधे मॉड्यूल के लिए सीधे बात करने की आवश्यकता से मुक्त हो सकते हैं बल्कि कॉलबैक के साथ संदेश का उपयोग कर सकते हैं।

1

विकल्प 1 सबसे उपयुक्त लगता है। आम तौर पर, जब तक पैटर्न इसके लिए कॉल नहीं करता है, तब तक आपको विरासत से बचना चाहिए, या इसका उपयोग करने के लिए कुछ अन्य अनिवार्य कारण हैं। विरासत का अधिक उपयोग आपके कोड को जितना अधिक होना चाहिए उतना ही कड़े रूप से एकीकृत करेगा।

+0

हाय, पी-स्टेटिक, आपके उत्तर के लिए धन्यवाद। क्या आप कृपया अधिक विस्तृत हो सकते हैं क्यों 1) सबसे उपयुक्त। आपने जो कहा वह सिर्फ "प्रतिनिधिमंडल विरासत से बेहतर है", और कुछ नहीं, और यह एक सामान्य डिजाइन नियम है, लेकिन मेरे प्रश्न के लिए विशिष्ट नहीं है। ईमानदारी से, मैं विश्वास नहीं कर रहा हूँ। – pepero

+1

ठीक है, मेरे अनुभव में आप अपने कार्यक्रम के किसी भी अन्य भाग में जीयूआई कोड पर निर्भरता नहीं चाहते हैं, जिसके लिए इसकी आवश्यकता नहीं है (दृश्य वर्ग की तरह) - मैंने इसे कुछ परियोजनाओं पर किया है, और हमेशा लंबे समय बाद खेद नहीं हुआ। तो यह 2) और 4 को समाप्त करता है)। 3) वास्तव में एक उचित समाधान की तरह लग रहा है; इसके साथ मेरी एकमात्र समस्या विरासत के खिलाफ मेरी पूर्वाग्रह है। :) –

+0

(आपने जो भी कहा है उसे +1 करें)। "विरासत के खिलाफ पूर्वाग्रह" हर जगह विरासत को रखने की एक तर्कहीन इच्छा से हमेशा बेहतर होता है। – Raveline

संबंधित मुद्दे