2008-10-19 19 views
7

मैं पीईजीटीके में डेस्कटॉप एप्लिकेशन पर काम कर रहा हूं और मेरे फ़ाइल संगठन की कुछ सीमाओं के खिलाफ बंपिंग प्रतीत होता हूं। इस प्रकार अब तक मैं अपने प्रोजेक्ट इस तरह से संरचित है:मैं पीईजीटीके डेस्कटॉप एप्लिकेशन के लिए सुसंगत रूप से मॉड्यूल कैसे व्यवस्थित करूं?

  • application.py - प्राथमिक आवेदन वर्ग (सबसे कार्यात्मक दिनचर्या)
  • gui.py रखती है - एक शिथिल युग्मित जीटीके जीयूआई कार्यान्वयन रखती है। संकेत कॉलबैक, आदि संभालती
  • command.py - कमांड लाइन स्वचालन कार्यों आवेदन कक्षा में डेटा पर निर्भर नहीं रखती
  • state.py - राज्य डेटा हठ वर्ग

यह काफी अच्छी तरह से सेवा की है रखती है अभी तक, लेकिन इस बिंदु पर application.py को लंबा होना शुरू हो रहा है। मैंने कई अन्य पीजीजीटीके अनुप्रयोगों को देखा है और उनके पास समान संरचनात्मक मुद्दे हैं। एक निश्चित बिंदु पर प्राथमिक मॉड्यूल बहुत लंबा हो जाता है और स्पष्टता और ऑब्जेक्ट ओरिएंटेशन बलि किए बिना कोडर मॉड्यूल में कोड को तोड़ने का स्पष्ट तरीका नहीं है।

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

क्या मुझे बस एक बहुत लंबा केंद्रीय मॉड्यूल होने का सौदा करना चाहिए या क्या इस परियोजना को संरचित करने का एक बेहतर तरीका है ताकि मुझे कक्षा ब्राउज़र पर भरोसा न करें?

संपादित मैं

ठीक है, तो बात सब MVC सामान के बारे में ले लिया। मेरे पास मेरे कोड में एमवीसी का मोटा अनुमान है, लेकिन स्वीकार्य रूप से मैं मॉडल और नियंत्रक को और अलग करके कुछ लाभ प्राप्त कर सकता हूं। हालांकि, मैं अजगर-gtkmvc के दस्तावेज़ों पर पढ़ रहा हूं (जिस तरह से एक महान खोज है, इसे संदर्भित करने के लिए धन्यवाद) और मेरी धारणा यह है कि यह मेरी समस्या को हल करने के लिए इतना औपचारिक रूप से हल नहीं करेगा। मेरा आवेदन एक एकल छाया फ़ाइल है, आमतौर पर एक खिड़की। तो इससे कोई फर्क नहीं पड़ता कि मैं मॉड्यूल की एमवीसी भूमिकाओं को कितनी कड़ाई से परिभाषित करता हूं, मुझे अभी भी एक कंट्रोलर मॉड्यूल होने की ज़रूरत है, जो कि अब सब कुछ कर रहा है, जो अब मेरे पास काफी है। माना जाता है कि मैं उचित एमवीसी कार्यान्वयन पर थोड़ा अस्पष्ट हूं और मैं शोध रखने जा रहा हूं, लेकिन यह मुझे नहीं देखता है कि इस वास्तुकला को मेरी मुख्य फाइल से और अधिक सामान मिल जाएगा, यह सिर्फ उस नाम का नाम बदलने जा रहा है नियंत्रक को फ़ाइल करें।

क्या मुझे खिड़की के अलग-अलग हिस्सों (टूलबार, मेनू, आदि) के लिए अलग नियंत्रक/दृश्य जोड़े के बारे में सोचना चाहिए? शायद यही वह है जो मैं यहां लापता हूं। ऐसा लगता है कि एस लॉट अपने दूसरे बुलेट प्वाइंट में इसका जिक्र कर रहा है।

अब तक प्रतिक्रियाओं के लिए धन्यवाद।

उत्तर

7

परियोजना Wader हम python gtkmvc उपयोग करते हैं, बहुत MVC पैटर्न लागू करने के लिए आसान बना देता है कि जब PyGTK और Glade का उपयोग कर में, आप svn repository में हमारी परियोजना की फाइल संगठन देख सकते हैं:

wader/ 
    cli/ 
    common/ 
    contrib/ 
    gtk/ 
    controllers/ 
    models/ 
    views/ 
    test/ 
    utils/ 
2

यह संभवतः पीईजीटीके के साथ कुछ भी करने की संभावना नहीं है, बल्कि एक सामान्य कोड संगठन मुद्दा है। आपको शायद कुछ एमवीसी (मॉडल-व्यू-कंट्रोलर) डिज़ाइन पैटर्न लागू करने से लाभ होगा। उदाहरण के लिए Design Patterns देखें।

0

पायथन 2.6 explicit relative imports का समर्थन करता है, जो पिछले संस्करणों की तुलना में पैकेजों का उपयोग करना आसान बनाता है। मेरा सुझाव है कि आप अपने ऐप को पैकेज के अंदर छोटे मॉड्यूल में तोड़ने में देखें। आप इस तरह अपने आवेदन का आयोजन कर सकते हैं:

myapp/ 
    application/ 
    gui/ 
    command/ 
    state/ 

कहाँ प्रत्येक निर्देशिका का अपना __init__.py है। उदाहरण के लिए आप किसी भी पायथन ऐप या यहां तक ​​कि मानक लाइब्रेरी मॉड्यूल देख सकते हैं।

2

"यह मानता है प्राथमिक आवेदन वर्ग (सबसे कार्यात्मक दिनचर्या) "

एकवचन के रूप में - एक वर्ग?

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

इस विशाल वर्ग में क्या है? मेरा सुझाव है कि आप शायद इसे टुकड़ों में दोबारा कर सकते हैं। आपके आवेदन वर्ग को दोबारा करने के लिए आपके पास दो उम्मीदवार आयाम हैं - यदि, वास्तव में, मैंने सही अनुमान लगाया है कि आपने सब कुछ एक ही कक्षा में रखा है।

  1. कुछ और करने से पहले, असली दुनिया इकाइयों के समानांतर घटकों में रिफैक्टर। यह स्पष्ट नहीं है कि आपके "state.py" में क्या है - गीला यह असली दुनिया की इकाइयों का एक उचित मॉडल है, या एप्लिकेशन में निरंतर भंडारण और कुछ ग़लत डेटा संरचना के बीच मैपिंग है। सबसे अधिक संभावना है कि आप अपने आवेदन से और अपने मॉडल (संभवतः state.py, संभवतः एक नया मॉड्यूल जो एक उचित मॉडल है) से संसाधित करना चाहते हैं।

    अपने मॉडल को टुकड़ों में तोड़ दें। यह नियंत्रण को व्यवस्थित करने और तत्वों को देखने में मदद करेगा। सबसे आम एमवीसी गलती नियंत्रण में बहुत अधिक है और मॉडल में कुछ भी नहीं है।

  2. बाद में, एक बार आपका मॉडल अधिकतर काम कर रहा है, तो आप जीयूआई प्रस्तुति के समानांतर घटकों में रिएक्टर देख सकते हैं। उदाहरण के लिए, विभिन्न शीर्ष-स्तरीय फ्रेमों में शायद अलग-अलग कोट्रोल ऑब्जेक्ट्स होनी चाहिए। यह स्पष्ट नहीं है कि "GUI.py" में क्या है - यह एक उचित दृश्य हो सकता है। गायब होने वाला प्रतीत होता है एक नियंत्रण घटक है।

0

तो मूल प्रश्न के लिए मेरे संपादन के बारे में कोई सूचना नहीं मिली है, मैं कुछ और अधिक अनुसंधान और निष्कर्ष किया है मैं है कि हाँ, मैं इंटरफ़ेस बाहर कई दृश्य में तोड़ चाहिए के लिए आ रहा हो रहे हैं , प्रत्येक अपने नियंत्रक के साथ। पायथन-gtkmvc व्यू कन्स्ट्रक्टर को glade_top_widget_name पैरामीटर प्रदान करके इसकी क्षमता प्रदान करता है। यह सब कुछ समझ में आता है, हालांकि मुझे अपने मौजूदा कोडबेस के बड़े रिफैक्टरिंग की आवश्यकता होगी, जिसे मैं निकट अवधि में ले सकता हूं (मुझे पता है, मैं जानता हूं, मैं होना चाहिए।) इसके अलावा, मुझे आश्चर्य है कि सिर्फ एक मॉडल ऑब्जेक्ट होना चाहिए (मेरा आवेदन काफी सरल है - पच्चीस राज्य वर्रों से अधिक नहीं) या अगर मुझे इसे कई मॉडलों में तोड़ना चाहिए और नियंत्रकों से निपटना है उनमें से कई मॉडल और चेनिंग नोटिफिकेशन देख रहे हैं। (फिर से, मुझे पता है कि मैं वास्तव में उत्तराधिकारी होना चाहिए।) अगर किसी के पास कोई और अंतर्दृष्टि है, तो मुझे अभी भी ऐसा नहीं लगता है कि मुझे मूल प्रश्न का उत्तर मिल गया है, हालांकि मेरे पास अभी एक दिशा है ।

(इसके अलावा ऐसा लगता है कि उनकी अन्य वास्तुशिल्प विकल्पों को हाथ में रखना चाहिए, क्योंकि अब तक मैंने एमवीसी शैली में कोडित एक पायथन एप्लिकेशन नहीं देखा है, लेकिन फिर कई पायथन अनुप्रयोगों में सटीक समस्या होती है मैंने ऊपर वर्णित किया है।)

2

इतने देर से उत्तर देने के लिए खेद है। Kiwi मुझे gtkmvc से कहीं बेहतर समाधान लगता है। यह किसी भी pygtk परियोजना के लिए मेरी पहली निर्भरता है।

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

  • कोई संबंधित समस्या नहीं^_^