नोट: रॉबर्ट सी। मार्टिन (उर्फ अंकल बॉब) ने अपने मुख्य भाषण, आर्किटेक्चर द लॉस्ट ईयर्स में इसे बेहतर और विनोदी तरीके से समझाया है । थोड़ा लंबा लेकिन बहुत सारी अच्छी अवधारणाएँ सिखाता है।
tl; dr: MVC के संदर्भ में अपने ऐप के बारे में न सोचें और योजना बनाएं। MVC फ्रेमवर्क केवल एक कार्यान्वयन विवरण है।
MVC के बारे में सबसे भ्रामक बात यह है कि, डेवलपर्स एक साथ चिपके सभी घटकों का उपयोग करने की कोशिश करते हैं।
किसी कार्यक्रम के संदर्भ में सोचने की कोशिश करें, न कि रूपरेखा के संदर्भ में।
आपके कार्यक्रम का एक उद्देश्य है। यह कुछ डेटा लेता है, डेटा के साथ काम करता है, और कुछ डेटा लौटाता है।
इस तरह, controller
आपके कार्यक्रम का वितरण तंत्र है।
- एक उपयोगकर्ता आपके कार्यक्रम के लिए एक अनुरोध भेजता है (मान लें कि, शॉपिंग कार्ट में एक उत्पाद जोड़ें)।
- नियंत्रक उस अनुरोध (उत्पाद जानकारी और उपयोगकर्ता जानकारी) को लेता है, यह आपके कार्यक्रम के आवश्यक हिस्से को कॉल करता है जो इस अनुरोध को संभाल लेंगे
$user->addToCart($product)
- आपका कार्यक्रम ( इस मामले में वस्तु
addToCart
का कार्य user
) वह काम करता है जो वह करने का इरादा रखता है और एक प्रतिक्रिया देता है (चलो कहते हैं success
)
- नियंत्रक संबंधित का उपयोग करके प्रतिक्रिया तैयार करता है
view
: जैसे। नियंत्रक वस्तु में$this->render($cartView('success')
इस तरह, नियंत्रकों को कार्यक्रम से हटा दिया जाता है, और वितरण तंत्र के रूप में उपयोग किया जाता है। वे नहीं जानते कि आपका कार्यक्रम कैसे काम करता है, वे सिर्फ यह जानते हैं कि कार्यक्रम के किस भाग को अनुरोधों के लिए बुलाया जाना चाहिए।
यदि आप किसी अन्य ढांचे का उपयोग करना चाहते हैं, तो आपके ऐप को बदलाव की आवश्यकता नहीं होगी, आपको अनुरोधों के लिए अपने प्रोग्राम को कॉल करने के लिए प्रासंगिक नियंत्रकों को लिखना होगा।
या यदि आप एक डेस्कटॉप संस्करण बनाना चाहते हैं, तो आपका ऐप वही रहेगा, आपको बस एक डिलीवरी तंत्र तैयार करना होगा।
और द Model
। इसे एक दृढ़ता तंत्र के रूप में सोचें।
OO तरीके से, आपके प्रोग्राम में ऑब्जेक्ट हैं जो डेटा को धारण करते हैं।
class User {
//...
private $id;
private $shoppingCart;
//...
}
class Product {
//...
private $id;
//...
}
आप खरीदारी की टोकरी में कोई उत्पाद जोड़ते हैं, तो आप जोड़ सकते हैं product::id
करने के लिए user::shoppingCart
।
और जब आप डेटा को जारी रखना चाहते हैं, तो आप model
फ्रेमवर्क के उस भाग का उपयोग कर सकते हैं , जिसमें आम तौर पर एक ORM का उपयोग होता है, जो कक्षाओं को डेटाबेस टेबल पर मैप करता है।
यदि आप अपने द्वारा उपयोग किए जाने वाले ORM को बदलना चाहते हैं, तो आपका प्रोग्राम वही रहेगा, केवल मैपिंग की जानकारी बदल जाएगी। या यदि आप सभी एक साथ डेटाबेस से बचना चाहते हैं, तो आप डेटा को सादे पाठ फ़ाइलों में लिख सकते हैं, और आपका ऐप समान रहेगा।
इसलिए, पहले अपना प्रोग्राम लिखें। यदि आप 'OO' तरीके से प्रोग्रामिंग करते हैं, तो भाषा की पुरानी पुरानी वस्तुओं का उपयोग करें। पहले MVC के संदर्भ में मत सोचो।