2009-01-21 13 views
73

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

  • फैट मॉडल, पतला नियंत्रकों
  • संभव

के रूप में मॉडल में के रूप में ज्यादा व्यापार तर्क रखें मेरी ऐप्लिकेशन में, मॉडल anorexic कर रहे हैं और नियंत्रकों मोटापे से ग्रस्त हैं। मेरे पास नियंत्रकों में सभी व्यावसायिक तर्क हैं और मॉडलों में संघों और सत्यापन नियमों के अलावा कुछ भी नहीं है।

  • ऐप सूचियों, जो मदों को शामिल करना है, और आइटम स्थान पर रहीं जा सकता है: मेरी नियंत्रकों के माध्यम से

    स्कैन, अब मैं तर्क का एक बहुत है कि शायद एक मॉडल में जाना चाहिए की पहचान कर सकते हैं। क्रमबद्ध तर्क में सूची रखने वाले सॉर्टिंग तर्क नियंत्रक में है।

  • इसी तरह, आइटम (आइटम मॉडल) में छवियां भी हैं (छवि मॉडल)। प्रत्येक आइटम में एक डिफ़ॉल्ट छवि हो सकती है (आइटम तालिका में image_id द्वारा निर्दिष्ट)। जब कोई आइटम अपनी छवियों के साथ प्रदर्शित होता है, तो डिफ़ॉल्ट छवि पहले दिखाई देनी चाहिए। मेरे पास तर्क है जो इसे नियंत्रक में करता है।
  • जब कोई सूची प्रदर्शित होती है, तो संबंधित सूचियां साइडबार में प्रदर्शित होती हैं। यह निर्धारित करने के लिए तर्क कि कौन सी सूचियां संबंधित हैं, नियंत्रक में हैं।

अब अपने सवालों के:

    उदाहरण मैं ऊपर दे दी है, मैं यह सोच कर कि उन तर्क के उदाहरण वर्तमान में एक नियंत्रक कि एक मॉडल में अंतर्गत आता है में हैं में सही रास्ते पर हूँ के साथ
  1. ?
  2. तर्क के कुछ अन्य क्षेत्र क्या हैं, वेब ऐप्स के लिए आम हैं, जिन्हें मॉडल में जाना चाहिए?
  3. मुझे यकीन है कि इस समस्या की पहचान करना और मेरा डिजाइन पैटर्न बदलना आधा युद्ध है, लेकिन अगर मैं उन उदाहरणों को लेने का फैसला करता हूं तो मैंने ऊपर दिया और उस तर्क को मॉडल में स्थानांतरित करने का प्रयास किया, मुझे नहीं पता कि कहां से शुरू करना है । क्या कोई मुझे यहां कुछ कोड पोस्ट करके सही दिशा में इंगित कर सकता है, या कुछ अच्छे शिक्षण संसाधनों से जुड़ सकता है? केकेपीएचपी विशिष्ट मदद बहुत अच्छी होगी, लेकिन मुझे यकीन है कि कुछ भी एमवीसी पर्याप्त होगा।
+0

इसके बारे में पहले सुना है :) – Marco

उत्तर

54

यह थोड़ा कठिन आप "सही" जवाब देने के लिए, क्योंकि उनमें से कुछ ढांचे की बारीकियों के साथ (चाहे जिन्हें आप के साथ काम कर रहे हैं) सौदा।

कम से कम CakePHP के संदर्भ में:

  1. हाँ

  2. कोई भी चीज जो डेटा या डेटा हेरफेर के साथ संबंधित एक मॉडल में होना चाहिए। केकेपीएचपी के संदर्भ में एक साधारण खोज() विधि के बारे में क्या? ... यदि कोई मौका है कि यह कुछ "विशेष" करेगा (यानी 'स्थिति' का एक विशिष्ट सेट याद रखें), जिसे आपको कहीं और चाहिए, यह मॉडल की विधि के अंदर लपेटने का एक अच्छा बहाना है।

  3. दुर्भाग्य से कभी भी एक आसान जवाब नहीं है, और कोड का पुन: उपयोग एक प्राकृतिक प्रक्रिया है। कभी-कभी आप बस जागते हैं: "पवित्र मैकरोनी ... जो मॉडल में होना चाहिए!" (शायद आप ऐसा नहीं करते हैं, लेकिन मेरे पास है :))

+2

अच्छी तरह से डाल दिया। और एक अच्छा ब्लॉग पोस्ट भी। – andyk

+5

ब्लॉग लेखक जीतने का जवाब एफटीडब्ल्यू लिखता है! – Xeoncross

19

अगर मेरा तर्क सही जगह में है कम से कम इन दो 'परीक्षण' की जाँच करने का उपयोग कर रहा: करने के लिए केवल एक ही बनाने

1) अगर मैं एक unittest लिखते हैं, है आसान है 'असली 'ऑब्जेक्ट पर परीक्षण करने के लिए ऑब्जेक्ट (= ऑब्जेक्ट जिसे आप उत्पादन में उपयोग कर रहे हैं) और इसमें कुछ अन्य ऑब्जेक्ट्स को छोड़कर अन्य लोगों को शामिल नहीं किया गया है। परीक्षण करने के लिए एक वास्तविक मॉडल ऑब्जेक्ट और वास्तविक नियंत्रक ऑब्जेक्ट दोनों की आवश्यकता होती है जो एक कार्यक्षमता हो सकती है जिसे आपको कार्यक्षमता को स्थानांतरित करने की आवश्यकता होती है।

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

भी दिलचस्प: http://www.martinfowler.com/bliki/AnemicDomainModel.html

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