2013-02-18 104 views
12

एक बार फिर, एक एमवीसी से संबंधित प्रश्न। कुछ दिन पहले मैंने ऐप्पल से कोको फंडामेंटल गाइड पढ़ना शुरू किया जिसमें ऐप्पल एमवीसी के कार्यान्वयन को बताता है।कोको एमवीसी वास्तव में एमवीपी नहीं है?

  • /पुराने पारंपरिक SmallTalk संस्करण: enter image description here

  • वर्तमान सेब

    एक यौगिक डिजाइन पैटर्न (link) के रूप में अध्याय MVC में, वे दो MVC-संस्करणों की तुलना परिभाषित संस्करण: enter image description here

वे इस प्रकार इस वर्तमान मॉडल का वर्णन:

इस यौगिक डिजाइन पैटर्न में नियंत्रक वस्तु मध्यस्थ पैटर्न शामिल रणनीति पैटर्न के साथ ही; यह मॉडल के बीच डेटा के प्रवाह मध्यस्थता और दोनों दिशाओं में वस्तुओं को देखने में मध्यस्थता करता है। मॉडल स्थिति में परिवर्तन नियंत्रक किसी ऑब्जेक्ट की ऑब्जेक्ट्स के माध्यम से ऑब्जेक्ट्स देखने के लिए संवाद किया जाता है।

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

क्या मैं पूरी तरह गलत हूं, क्या मैं एमवीसी या एमवीपी को गलत समझता हूं? या ऐप्पल ने इस पैटर्न के लिए गलत नाम का उपयोग किया था? और सबसे महत्वपूर्ण बात यह है कि एमवीसी नामक यह वर्तमान पैटर्न क्यों है?

+0

यह थोड़े निर्भर करता है। यदि आपके "विचार" सिर्फ गूंगा टेम्पलेट्स हैं और मॉडल केवल सक्रिय रिकॉर्ड उदाहरणों का संग्रह है, तो आपके पास जो भी है वह एमवीपी भी नहीं है। यह सिर्फ रेल का एक क्लोन है। –

उत्तर

11

आप गलत नहीं हैं, लेकिन न ही ऐप्पल दस्तावेज के लेखक हैं।

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

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

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

बहुत सारे कोको कार्यान्वयन पतले नियंत्रकों को पसंद करते हैं, जो अनिवार्य रूप से दृश्य और मॉडल को कम करने के लिए फ्लेक्स के रूप में काम करते हैं।

+0

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

+0

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

3

चूंकि एमवीपी एमवीसी का सबसेट है, इसलिए इसे एमवीसी सिस्टम में ढूंढना आश्चर्यजनक नहीं है।हां, वह दूसरा चित्र एमवीपी पैटर्न को दिखाता है।

ऐप्पल इसे मध्यस्थ नियंत्रक कहता है - मैं संश्लेषित करता हूं - एमवीपी के लिए सिर्फ एक और नाम है।

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

मुझे यह जानने के लिए एमवीपी देखना था कि आप किस बिल्ली के बारे में पूछ रहे थे। इस शब्द का इस्तेमाल 1 99 6 में एक पेपर में किया गया था। जब ओएस एक्स जारी किया गया था तो यह अभी भी नया होगा।