मालवेअर हे अनाहूत किंवा धोकादायक प्रोग्राम आहेत जे...
![व्हायरस आणि मालवेअर काढून टाकण्यासाठी सर्वोत्तम उपयुक्तता](https://i2.wp.com/webhelper.info/images/danger.jpg)
तुम्ही डिझाईन नमुन्यांबद्दल ऐकले असेल आणि या अद्भुत पुस्तकांमधून पानही घेतले असेल:
हा लेख प्रामुख्याने नवशिक्यांसाठी उपयुक्त ठरेल. असो, मला आशा आहे की काही तासांत तुम्हाला कल्पना येईल MVC अंमलबजावणीपॅटर्न जो सर्व आधुनिक वेब फ्रेमवर्कला अधोरेखित करतो आणि "ते कसे करावे" यावर पुढील प्रतिबिंबासाठी "अन्न" देखील मिळवतो. लेखाच्या शेवटी एक निवड आहे उपयुक्त दुवे, जे तुम्हाला वेब फ्रेमवर्कमध्ये (MVC व्यतिरिक्त) काय असतात आणि ते कसे कार्य करतात हे समजून घेण्यास देखील मदत करेल.
अनुभवी PHP प्रोग्रामरना या लेखात स्वतःसाठी काही नवीन सापडण्याची शक्यता नाही, परंतु त्यांच्या टिप्पण्या आणि मुख्य मजकूरावरील टिप्पण्या खूप उपयुक्त ठरतील! कारण सिद्धांताशिवाय, सराव अशक्य आहे, आणि सरावशिवाय, सिद्धांत निरुपयोगी आहे, नंतर प्रथम थोडा सिद्धांत असेल, आणि नंतर आपण सरावाकडे जाऊ. जर तुम्ही MVC संकल्पनेशी आधीच परिचित असाल, तर तुम्ही सिद्धांत विभाग वगळू शकता आणि थेट सरावावर जाऊ शकता.
1. सिद्धांत MVC पॅटर्न अनुप्रयोगाची रचना करण्याचा एक सोपा मार्ग वर्णन करतो, ज्याचा उद्देश वापरकर्ता इंटरफेसपासून व्यवसाय तर्कशास्त्र वेगळे करणे आहे. परिणामी, अनुप्रयोग स्केल करणे, चाचणी करणे, देखरेख करणे आणि अर्थातच अंमलबजावणी करणे सोपे आहे.संकल्पनात्मक आकृतीचा विचार करा MVC टेम्पलेट(माझ्या मते, मी पाहिलेली ही सर्वात यशस्वी योजना आहे):
आर्किटेक्चर मध्ये MVC मॉडेलडेटा आणि व्यवसाय तर्कशास्त्र नियम प्रदान करते, दृश्य वापरकर्ता इंटरफेससाठी जबाबदार आहे आणि नियंत्रक मॉडेल आणि दृश्य यांच्यातील परस्परसंवाद प्रदान करतो.
MVC अनुप्रयोगाचा ठराविक प्रवाह खालीलप्रमाणे वर्णन केला जाऊ शकतो:
व्ह्यू - कंट्रोलर आणि मॉडेलकडून प्राप्त झालेल्या डेटाचे बाह्य प्रदर्शन निर्दिष्ट करण्यासाठी वापरले जाते.
व्ह्यूजमध्ये HTML मार्कअप आणि डेटा ट्रॅव्हर्स, फॉरमॅट आणि डिस्प्ले करण्यासाठी PHP कोडचे छोटे इन्सर्ट असतात.
डेटाबेसमध्ये थेट प्रवेश करू नये. मॉडेल्सनी हेच करायला हवे.
वापरकर्त्याच्या विनंतीवरून मिळवलेल्या डेटासह कार्य करू नये. हे कार्य नियंत्रकाने केले पाहिजे.
आउटपुट-रेडी डेटा मिळविण्यासाठी कंट्रोलर किंवा मॉडेल्सच्या गुणधर्म आणि पद्धतींमध्ये थेट प्रवेश करू शकतो.
दृश्ये सामान्यतः सर्व पृष्ठांसाठी समान मार्कअप असलेल्या सामान्य टेम्पलेटमध्ये विभागली जातात (उदाहरणार्थ, शीर्षलेख आणि तळटीप) आणि टेम्पलेटचे भाग जे मॉडेलमधून डेटा आउटपुट प्रदर्शित करण्यासाठी किंवा डेटा एंट्री फॉर्म प्रदर्शित करण्यासाठी वापरले जातात.
कंट्रोलर हा एक गोंद आहे जो मॉडेल, दृश्ये आणि इतर घटकांना जोडतो कार्यरत अनुप्रयोग. वापरकर्त्याच्या विनंतीवर प्रक्रिया करण्यासाठी नियंत्रक जबाबदार आहे. कंट्रोलरमध्ये SQL क्वेरी असू नयेत. त्यांना मॉडेलमध्ये ठेवणे चांगले आहे. कंट्रोलरमध्ये HTML किंवा इतर मार्कअप नसावेत. ते दृश्यात आणण्यासारखे आहे.
सु-डिझाइन केलेल्या MVC ऍप्लिकेशनमध्ये, कंट्रोलर सहसा खूप पातळ असतात आणि त्यात फक्त काही डझन ओळी कोड असतात. मध्ये स्टुपिड फॅट कंट्रोलर्स (एसएफसी) बद्दल काय सांगितले जाऊ शकत नाही सीएमएस जूमला. कंट्रोलर लॉजिक हे अगदी वैशिष्ट्यपूर्ण आहे आणि त्यातले बरेच काही चालते बेस वर्ग.
मॉडेल, त्याउलट, खूप जाड आणि समाविष्ट आहेत सर्वाधिकडेटा प्रोसेसिंगशी संबंधित कोड, कारण त्यात समाविष्ट असलेली डेटा संरचना आणि व्यवसाय तर्क सामान्यतः विशिष्ट अनुप्रयोगासाठी अगदी विशिष्ट असतात.
मला आशा आहे की तुम्ही आधीच लक्षात घेतले असेल की वेगवेगळ्या साइट्स परिपूर्ण असू शकतात भिन्न स्वरूपबांधकाम पत्ता लिहायची जागा. प्रत्येक फॉरमॅट वेब ऍप्लिकेशनचे आर्किटेक्चर प्रदर्शित करू शकते. हे नेहमीच होत नसले तरी, बहुतेक प्रकरणांमध्ये हे एक स्पष्ट तथ्य आहे.
ॲड्रेस बारसाठी दोन पर्यायांचा विचार करू या, जे काही मजकूर आणि वापरकर्ता प्रोफाइल प्रदर्शित करतात.
या प्रकरणात अंदाजे प्रक्रिया कोड:
स्विच($_GET["कृती"]) ( केस "बद्दल" : need_once("about.php"); // "आमच्याबद्दल" पृष्ठ खंडित; केस "संपर्क" : need_once("contacts.php"); // "संपर्क" पृष्ठ खंड "feedback" : need_once("feedback.php"); // पृष्ठ "feedback" break; // पृष्ठ "404";
मला वाटते की जवळजवळ प्रत्येकाने हे आधी केले आहे.
URL राउटिंग इंजिन वापरून, समान माहिती प्रदर्शित करण्यासाठी तुम्ही तुमचा अर्ज यासारख्या विनंत्या स्वीकारण्यासाठी कॉन्फिगर करू शकता:
http://www.example.com/contacts/feedback
येथे संपर्क नियंत्रकाचे प्रतिनिधित्व करतात आणि अभिप्राय ही संपर्क नियंत्रक पद्धत आहे जी फॉर्म प्रदर्शित करते अभिप्रायइ. आम्ही व्यावहारिक भागात या समस्येकडे परत येऊ.
हे जाणून घेणे देखील योग्य आहे की अनेक वेब फ्रेमवर्कचे राउटर तुम्हाला सानुकूल URL मार्ग (URL च्या प्रत्येक भागाचा अर्थ काय ते निर्दिष्ट करा) आणि त्यावर प्रक्रिया करण्याचे नियम तयार करण्याची परवानगी देतात.
आता सरावासाठी पुढे जाण्यासाठी आपल्याकडे पुरेसे सैद्धांतिक ज्ञान आहे.
पुढे पाहताना, मी म्हणेन की कोर वर्ग मॉडेल, व्ह्यू आणि कंट्रोलर कोर फोल्डरमध्ये संग्रहित केले जातील.
त्यांची मुले नियंत्रक, मॉडेल आणि दृश्य निर्देशिकेत संग्रहित केली जातील. index.php फाइल हा ऍप्लिकेशनमधील प्रवेश बिंदू आहे. bootstrap.php फाइल ऍप्लिकेशन लोड करणे, सर्व आवश्यक मॉड्यूल्स जोडणे इ.
आम्ही क्रमाने जाऊ; चला index.php फाईल उघडू आणि त्यात खालील कोड भरा:
ini_set("display_errors", 1); need_one "application/bootstrap.php";
येथे कोणतेही प्रश्न नसावेत.
पुढे, लगेच bootstrap.php फाइलवर जाऊया:
need_one "core/model.php"; need_one "core/view.php"; need_one "core/controller.php"; need_one "core/route.php"; मार्ग::स्टार्ट(); // राउटर सुरू करा
पहिल्या तीन ओळींमध्ये सध्या अस्तित्वात नसलेल्या कर्नल फाइल्सचा समावेश असेल. शेवटच्या ओळीफाईलला राउटर क्लासशी कनेक्ट करा आणि स्टॅटिक स्टार्ट मेथडवर कॉल करून अंमलबजावणीसाठी लॉन्च करा.
आम्ही रूटिंग मध्ये ठेवू स्वतंत्र फाइल route.php कोर डिरेक्ट्रीमध्ये. या फाईलमध्ये आम्ही रूट क्लासचे वर्णन करू, जे कंट्रोलर मेथड रन करेल, ज्यामुळे पेज व्ह्यू तयार होईल.
route.php फाइलची सामग्री
वर्ग मार्ग ( स्थिर कार्य प्रारंभ() ( // नियंत्रक आणि डीफॉल्ट क्रिया $controller_name = "मुख्य"; $action_name = "index"; $routes = explode("/", $_SERVER["REQUEST_URI"]); // मिळवा कंट्रोलरचे नाव जर (!empty($routes)) ( $controller_name = $routes; ) // क्रियेचे नाव मिळवा जर (!empty($routes)) ( $action_name = $routes; ) // उपसर्ग जोडा $model_name = "मॉडेल_".$controller_name; $controller_name; $action_name = "action_".$action_name; // मॉडेल क्लास (मॉडेल फाइल असू शकत नाही) $model_file = strtolower ($model_name) ".php"; $model_path = "application/models/".$model_file; if(file_exists/$model_file;) नियंत्रक वर्गासह $controller_file = strtolower ($controller_name.php"; $controller_path = "application/controllers/."$controller_file; if(file_exists($controller_path)) ( "application/controllers/."$controller_file समाविष्ट करा; ) अन्यथा ( /* येथे अपवाद टाकणे योग्य होईल, परंतु गोष्टी सुलभ करण्यासाठी, आम्ही त्वरित 404 पृष्ठावर पुनर्निर्देशित करू */ मार्ग::ErrorPage404(); ) // एक नियंत्रक $controller = नवीन $controller_name तयार करा ; $action = $action_name; if(method_exists($controller, $action)) ( // कंट्रोलर क्रियेला कॉल करा $controller->$action(); ) इतर (// येथे अपवाद मार्ग::ErrorPage404();) टाकणे अधिक शहाणपणाचे ठरेल. ) फंक्शन ErrorPage404( ) ( $host = "http://."$_SERVER["HTTP_HOST"]."/"; शीर्षलेख("HTTP/1.1 404 सापडले नाही"); शीर्षलेख ("स्थिती: 404 आढळले नाही"); शीर्षलेख ("स्थान:."$होस्ट."404"); ))
जागतिक ॲरे घटक $_SERVER["REQUEST_URI"] मध्ये वापरकर्त्याने संपर्क साधलेला पूर्ण पत्ता असतो.
उदाहरणार्थ: example.ru/contacts/feedback
फंक्शन वापरणे एकदम बाहेर पडणेपत्ता घटकांमध्ये विभागलेला आहे. परिणामी, आम्हाला नियंत्रकाचे नाव मिळाले, उदाहरणासाठी, हे नियंत्रक आहे संपर्कआणि कारवाईचे नाव, आमच्या बाबतीत - अभिप्राय.
पुढे, मॉडेल फाईल (मॉडेल गहाळ असू शकते) आणि कंट्रोलर फाइल, जर असेल तर, कनेक्ट केली जातात आणि शेवटी, कंट्रोलरचे उदाहरण तयार केले जाते आणि कंट्रोलर क्लासमध्ये वर्णन केले असल्यास, कृती पुन्हा कॉल केली जाते.
अशा प्रकारे, उदाहरणार्थ, पत्त्यावर जाताना:
example.com/portfolio
किंवा
example.com/portfolio/index
राउटर खालील क्रिया करेल:
मी तुम्हाला आठवण करून देतो की त्यामध्ये बेस क्लास असतील, जे आता आपण लिहायला सुरुवात करू.
model.php फाइलची सामग्री
वर्ग मॉडेल ( सार्वजनिक कार्य get_data() ( ) )
मॉडेल वर्गामध्ये एकच रिक्त डेटा प्राप्त करण्याची पद्धत आहे, जी वंशज वर्गांमध्ये अधिलिखित केली जाईल. जेव्हा आपण वंशज वर्ग तयार करतो तेव्हा सर्व काही स्पष्ट होईल.
view.php फाइलची सामग्री
वर्ग दृश्य ( //public $template_view; // येथे तुम्ही डीफॉल्ट सामान्य दृश्य निर्दिष्ट करू शकता. फंक्शन जनरेट($content_view, $template_view, $data = null) ( /* if(is_array($data)) ( // कन्व्हर्ट ॲरे व्हेरिएबल्स एक्स्ट्रॅक्ट ($डेटा) मध्ये घटक;
त्या पद्धतीचा अंदाज लावणे अवघड नाही उत्पन्न कराएक दृश्य तयार करण्याचा हेतू आहे. खालील पॅरामीटर्स त्यास पास केले जातात:
आमच्या बाबतीत, सामान्य टेम्पलेटमध्ये शीर्षलेख, मेनू, साइडबार आणि तळटीप समाविष्ट असेल आणि पृष्ठांची सामग्री यात समाविष्ट असेल स्वतंत्र फॉर्म. पुन्हा, हे साधेपणासाठी केले जाते.
controller.php फाइलची सामग्री
क्लास कंट्रोलर ( सार्वजनिक $मॉडेल; सार्वजनिक $view; फंक्शन __construct() ( $this->view = new View(); ) function action_index() ( )
पद्धत क्रिया_निर्देशांक- ही क्रिया डीफॉल्टनुसार म्हणतात; वंशज वर्ग लागू करताना आम्ही ती ओव्हरराइड करू.
मागील आकृतीमध्ये, template_view.php फाइल स्वतंत्रपणे हायलाइट केली आहे - हे सर्व पृष्ठांसाठी समान मार्कअप असलेले टेम्पलेट आहे. सर्वात सोप्या प्रकरणात ते असे दिसू शकते:
मुख्यपृष्ठ
साइटला सादर करण्यायोग्य स्वरूप देण्यासाठी, आम्ही डिझाइन करतो CSS टेम्पलेटआणि HTML मार्कअपची रचना बदलून आमच्या वेबसाइटमध्ये समाकलित करा आणि CSS कनेक्शनआणि JavaScript फाइल्स:
लेखाच्या शेवटी, "परिणाम" विभागात, एका प्रकल्पासह GitHub भांडाराचा दुवा आहे ज्यामध्ये एक साधे टेम्पलेट एकत्रित करण्यासाठी पावले उचलली गेली आहेत.
सह फाइल करा सामान्य दृश्यआम्ही आधी पाहिले. सामग्री फाइल main_view.php विचारात घ्या:
स्वागत आहे!
OLOLOSHA TEAM ही वेबसाइट डेव्हलपमेंट क्षेत्रातील प्रथम श्रेणीतील तज्ञांची एक टीम आहे ज्याला भारत आणि सिलोनमधील मेक्सिकन मुखवटे, कांस्य आणि दगडी पुतळे, पाच-सहा शतके इक्वेटोरियल आफ्रिकेच्या मास्टर्सनी तयार केलेल्या बेस-रिलीफ्स आणि शिल्पे गोळा करण्याचा अनेक वर्षांचा अनुभव आहे. पूर्वी...
मॉडेल कंट्रोलर क्लास controller_portfolio.php फाइलमध्ये समाविष्ट आहे, त्याचा कोड येथे आहे:
क्लास कंट्रोलर_पोर्टफोलिओ कंट्रोलर ( फंक्शन __कन्स्ट्रक्ट () ( $this->मॉडेल = नवीन मॉडेल_पोर्टफोलिओ(); $this->view = new View(); ) function action_index() ( $data = $this->model->get_data( $this->view->generate("portfolio_view.php", "template_view.php", $data) )
व्हेरिएबलला डेटापद्धतीद्वारे परत केलेला ॲरे लिहिला आहे डेटा मिळवाजे आम्ही आधी पाहिले.
हे व्हेरिएबल नंतर पद्धत पॅरामीटर म्हणून पास केले जाते उत्पन्न करा, ज्यामध्ये हे देखील समाविष्ट आहे: सह फाइल नाव सामान्य टेम्पलेटआणि पृष्ठ सामग्रीसह दृश्य असलेल्या फाइलचे नाव.
पृष्ठ सामग्री असलेले दृश्य portfolio_view.php फाइलमध्ये आहे.
पोर्टफोलिओ
वर्ष | प्रकल्प | वर्णन |
परिणामी व्यवसाय कार्ड वेबसाइटचा स्क्रीनशॉट
परंतु या आवृत्तीमध्ये मी खालील वर्ग (आणि त्यांचे संबंधित प्रकार) रेखाटले आहेत:
परंतु, साधे वेब ॲप्लिकेशन्स (उदाहरणार्थ, बिझनेस कार्ड साइट्स) विकसित करताना, अनेक शेकडो फाइल्स असलेल्या Yii किंवा Kohana सारख्या वेब फ्रेमवर्कचा वापर करणे नेहमीच योग्य नसते. आता आम्ही एक सुंदर MVC मॉडेल तयार करू शकतो जेणेकरून Php, Html, CSS आणि मिसळू नये JavaScript कोडएका फाईलमध्ये.
हा लेख CMF शिकण्यासाठी एक प्रारंभिक बिंदू आहे जे तुम्ही तुमच्या वेब ऍप्लिकेशनसाठी आधार म्हणून वापरू शकता असे खरोखरच योग्य आहे. कदाचित यामुळे तुम्हाला प्रेरणा मिळाली असेल आणि तुम्ही आधीच MVC वर आधारित तुमचे स्वतःचे मायक्रोफ्रेमवर्क किंवा CMS लिहिण्याचा विचार करत आहात. परंतु, "ब्लॅकजॅक आणि वेश्या" सह पुढील चाक पुन्हा शोधण्यापूर्वी पुन्हा विचार करा: कदाचित तुमच्या प्रयत्नांना विकासाकडे निर्देशित करणे आणि आधीच अस्तित्वात असलेल्या प्रकल्पाच्या समुदायाला मदत करणे अधिक वाजवी असेल?!
P.S.: टिप्पण्यांमध्ये राहिलेल्या काही टिप्पण्या लक्षात घेऊन लेख पुन्हा लिहिला गेला. टीका खूप उपयुक्त ठरली. प्रतिसादानुसार: टिप्पण्या, पीएम आणि पोस्ट आवडींमध्ये जोडलेल्या वापरकर्त्यांची संख्या, ही पोस्ट लिहिण्याची कल्पना इतकी वाईट नाही. दुर्दैवाने, वेळेअभावी सर्व इच्छा विचारात घेणे आणि अधिक तपशीलवार लिहिणे शक्य नाही... परंतु कदाचित ज्या रहस्यमय व्यक्तींनी मूळ आवृत्ती नाकारली आहे ते हे करतील. तुमच्या प्रकल्पांसाठी शुभेच्छा!
5. विषयावरील उपयुक्त लिंक्सची निवड लेख बऱ्याचदा वेब फ्रेमवर्कच्या विषयाला स्पर्श करतो - हा एक अतिशय विस्तृत विषय आहे, कारण मायक्रोफ्रेमवर्कमध्ये देखील अनेक घटक चतुराईने एकमेकांशी जोडलेले असतात आणि त्याबद्दल बोलण्यासाठी एकापेक्षा जास्त लेख लागतील. घटक तथापि, फ्रेमवर्कच्या विषयाशी एक प्रकारे किंवा दुसऱ्या प्रकारे संबंधित लिंक्सची एक छोटी निवड (ज्याचा मी हा लेख लिहिताना अनुसरण केला) येथे सादर करण्याचे मी ठरवले आहे.टॅग: टॅग जोडा
शुभ दुपार, प्रिय सहकारी. या लेखात मी MVC, MVP आणि MVVM पॅटर्नमधील फरकांच्या माझ्या विश्लेषणात्मक समजाबद्दल बोलू इच्छितो. समजून घेण्याच्या इच्छेने हा लेख लिहिण्यास प्रवृत्त केले आधुनिक दृष्टिकोनमोठा विकास करताना सॉफ्टवेअरआणि संबंधित आर्किटेक्चरल वैशिष्ट्ये. माझ्या करिअरच्या शिडीच्या सध्याच्या टप्प्यावर, मी थेट विकासक नाही, त्यामुळे लेखात त्रुटी, अयोग्यता आणि गैरसमज असू शकतात. प्रोग्रामर आणि वास्तुविशारद काय करत आहेत हे विश्लेषक कसे पाहतात याची उत्सुकता आहे? मग मांजरीचे स्वागत आहे.
लिंक्स मी सर्वप्रथम ज्याच्याशी सुरुवात करू इच्छितो ती म्हणजे लिंक्स बाह्य साहित्य, ज्याने मला हा लेख लिहिण्याच्या प्रक्रियेत मार्गदर्शन केले:चला प्रथम मुख्य गोष्टीसह प्रारंभ करूया - मॉडेल-व्ह्यू-कंट्रोलर. MVC हा एक मूलभूत पॅटर्न आहे ज्याने अनेक तंत्रज्ञानामध्ये प्रवेश केला आहे, नवीन तंत्रज्ञानाचा उदय झाला आहे आणि विकासकांसाठी दररोज जीवन सोपे बनवले आहे.
MVC नमुना प्रथम SmallTalk भाषेत दिसला. विकासकांना एक आर्किटेक्चरल सोल्यूशन आणावे लागले जे त्यांना वेगळे करण्यास अनुमती देईल GUIव्यवसाय तर्कशास्त्र पासून, आणि डेटा पासून व्यवसाय तर्क. अशा प्रकारे, त्याच्या क्लासिक आवृत्तीमध्ये, MVC मध्ये तीन भाग असतात, जे त्यास त्याचे नाव देतात. चला त्यांना पाहूया:
मॉडेल मॉडेल हा सहसा अनुप्रयोगाचा कार्यात्मक व्यवसाय तर्क असलेला भाग म्हणून समजला जातो. मॉडेल उर्वरित उत्पादनापासून पूर्णपणे स्वतंत्र असणे आवश्यक आहे. मॉडेल लेयरला डिझाइन घटकांबद्दल किंवा ते कसे प्रस्तुत केले जाईल याबद्दल काहीही माहित असणे आवश्यक नाही. एक परिणाम प्राप्त झाला आहे जो आपल्याला मॉडेलला स्पर्श न करता डेटाचे सादरीकरण, ते कसे प्रदर्शित केले जातात ते बदलण्याची परवानगी देतो.मॉडेलमध्ये खालील वैशिष्ट्ये आहेत:
प्रस्तुतीकरणात खालील वैशिष्ट्ये आहेत:
चला त्या प्रत्येकाचा विचार करूया आणि त्यांची तुलना करूया.
मॉडेल-दृश्य-प्रस्तुतकर्ताहा दृष्टीकोन तुम्हाला प्रतिनिधित्व अमूर्तता तयार करण्यास अनुमती देतो. हे करण्यासाठी, तुम्हाला सादरीकरण इंटरफेस निवडण्याची आवश्यकता आहे एक निश्चित संचगुणधर्म आणि पद्धती. प्रस्तुतकर्ता, यामधून, इंटरफेस अंमलबजावणीचा संदर्भ प्राप्त करतो, सादरीकरण कार्यक्रमांची सदस्यता घेतो आणि विनंती केल्यावर मॉडेलमध्ये सुधारणा करतो.
सादरकर्त्याची चिन्हे:
अंमलबजावणी:
प्रत्येक दृश्याने संबंधित इंटरफेस लागू करणे आवश्यक आहे. व्ह्यू इंटरफेस वापरकर्त्याशी संवाद साधण्यासाठी आवश्यक असलेल्या फंक्शन्स आणि इव्हेंट्सचा सेट परिभाषित करतो (उदाहरणार्थ, IView .ShowErrorMessage(string msg)). प्रस्तुतकर्त्याकडे संबंधित इंटरफेसच्या अंमलबजावणीसाठी संदर्भ असणे आवश्यक आहे, जे सहसा कन्स्ट्रक्टरमध्ये पास केले जाते.
प्रेझेंटेशन लॉजिकमध्ये प्रस्तुतकर्त्याच्या उदाहरणाचा संदर्भ असणे आवश्यक आहे. सर्व दृश्य इव्हेंट्स प्रक्रियेसाठी सादरकर्त्याकडे पाठवले जातात आणि सादरीकरण तर्काद्वारे (इतर दृश्यांच्या निर्मितीसह) जवळजवळ कधीही प्रक्रिया केली जात नाही.
वापर उदाहरण: विंडोज फॉर्म.
मॉडेल-दृश्य-दृश्य मॉडेलव्ह्यू मॉडेलची वैशिष्ट्ये:
अंमलबजावणी:
हा नमुना वापरताना, दृश्य संबंधित इंटरफेस (IView) लागू करत नाही.
दृश्यामध्ये डेटा स्रोत (DataContex) चा दुवा असणे आवश्यक आहे, जे या प्रकरणातदृश्य मॉडेल आहे. दृश्य घटक दृश्य मॉडेलच्या संबंधित गुणधर्म आणि घटनांशी बांधील आहेत.
या बदल्यात, व्ह्यू मॉडेल एक विशेष इंटरफेस लागू करते ज्याचा वापर केला जातो स्वयंचलित अद्यतनसादरीकरण घटक. WPF मधील अशा इंटरफेसचे उदाहरण INotifyPropertyChanged असेल.
उदाहरण वापर: WPF
मॉडेल-दृश्य-नियंत्रकनियंत्रक वैशिष्ट्ये
अंमलबजावणी:
कंट्रोलर घटना बाहेरून रोखतो आणि त्यात अंतर्भूत केलेल्या तर्कानुसार, योग्य पद्धत कॉल करून मॉडेल बदलून या इव्हेंटवर प्रतिक्रिया देतो. बदलानंतर, मॉडेल तो बदललेला इव्हेंट वापरतो आणि याला सबस्क्राइब केलेले सर्व दृश्य इव्हेंट, ते प्राप्त झाल्यानंतर, अद्ययावत डेटासाठी मॉडेलकडे वळते, त्यानंतर ते प्रदर्शित केले जातात.
वापर उदाहरण: MVC ASP.NET
सारांश MVVM आणि MVP पॅटर्नची अंमलबजावणी, पहिल्या दृष्टीक्षेपात, अगदी सोपी आणि समान दिसते. तथापि, MVVM साठी दृश्याचे व्यू-मॉडेलवर बंधन आपोआप होते, परंतु MVP साठी प्रोग्राम करणे आवश्यक आहे.तुमच्या वेळेबद्दल खूप खूप धन्यवाद, वाचनाचा आनंद घ्या!
मॉडेल-व्ह्यू-कंट्रोलर (MVC) पॅटर्न, 1970 च्या दशकाच्या उत्तरार्धात सापडला, हा एक सॉफ्टवेअर आर्किटेक्चर डिझाइन पॅटर्न आहे ज्याचे मुख्य लक्ष्य डेटा फंक्शन्स त्यांच्या सादरीकरणापासून वेगळे करणे आहे. सैद्धांतिकदृष्ट्या, उत्तम प्रकारे डिझाइन केलेले MVC ऍप्लिकेशन फ्रंट-एंड आणि बॅक-एंड डेव्हलपरना त्यांच्या कामाच्या दरम्यान एकमेकांच्या जबाबदारीच्या क्षेत्रात हस्तक्षेप करू शकत नाही, म्हणजेच, फ्रंट-एंड डेव्हलपरला "स्वयंपाकघर" बद्दल काहीही माहित असणे आवश्यक नाही. त्याच्या बॅक-एंड सहकाऱ्याचा आणि त्याउलट.
जरी MVC हे मूळतः डेस्कटॉप ऍप्लिकेशन्सच्या विकासासाठी डिझाइन केले गेले असले तरी, ते आधुनिक कार्यांसाठी अनुकूल केले गेले आहे आणि वेब डेव्हलपर्समध्ये अत्यंत लोकप्रिय आहे कारण, जबाबदाऱ्यांच्या पृथक्करणामुळे, एक स्पष्ट, अधिक सज्ज तयार करणे शक्य आहे. पुन्हा वापरकोड MVC पॅटर्नचा परिणाम स्वच्छ, मॉड्युलर सिस्टममध्ये होतो ज्यामुळे विकासकांना विद्यमान कोडमध्ये खूप लवकर बदल करता येतात.
या लेखात आपण मूलभूत गोष्टी पाहू MVC तत्त्वे, पॅटर्नच्या व्याख्येपासून सुरुवात करून आणि एका छोट्या उदाहरणात त्याचा वापर सुरू ठेवा. हा लेख प्रामुख्याने त्यांच्यासाठी उपयुक्त ठरेल ज्यांना आयुष्यात कधीही या पॅटर्नचा सामना करावा लागला नाही आणि कदाचित, ज्यांना MVC चे ज्ञान वाढवायचे आहे त्यांच्यासाठी.
MVC समजून घेणेआधीच नमूद केल्याप्रमाणे, पॅटर्नचे नाव तीन शब्दांच्या संक्षेपातून आले आहे: मॉडेल (मॉडेल), दृश्य (दृश्य) आणि नियंत्रक (नियंत्रक). थोडक्यात, पॅटर्नच्या ऑपरेशनचे तत्त्व एका आकृतीसह स्पष्ट केले जाऊ शकते (विकिपीडियावर आढळू शकते):
हे आकृती पॅटर्नमधील माहितीचा दिशाहीन प्रवाह स्पष्टपणे दर्शवते आणि प्रत्येक घटकाच्या भूमिकांचे वर्णन देखील करते.
मॉडेलमॉडेलचा वापर डेटामध्ये प्रवेश करण्यासाठी आणि हाताळण्यासाठी केला जातो. बहुतेक प्रकरणांमध्ये, मॉडेल हे डेटा स्टोअरमध्ये प्रवेश करण्यासाठी वापरले जाते (जसे की डेटाबेस). मॉडेल डेटा शोधणे, तो तयार करणे, त्यात बदल करणे आणि स्टोरेजमधून हटवणे यासाठी इंटरफेस प्रदान करते. MVC पॅटर्नच्या संदर्भात, मॉडेल दृश्य आणि नियंत्रक यांच्यातील मध्यस्थ आहे.
अत्यंत महत्वाचे वैशिष्ट्यमॉडेल असे आहे की तांत्रिकदृष्ट्या त्याला कंट्रोलर आणि व्ह्यूमधील डेटासह काय होत आहे याची माहिती नसते. मॉडेलने कधीही इतर पॅटर्न घटकांना/कडून कोणत्याही विनंत्या करू नये किंवा प्रतीक्षा करू नये.
तथापि, नेहमी लक्षात ठेवा की मॉडेल हे केवळ डेटाबेस किंवा इतर प्रणालीचे प्रवेशद्वार नाही जे डेटा पुढे-मागे हस्तांतरित करण्याशिवाय काहीही करत नाही. मॉडेल हे डेटाच्या प्रवेशद्वारासारखे असते. मॉडेल बहुतेक प्रकरणांमध्ये सिस्टमचा सर्वात जटिल भाग आहे, अंशतः मॉडेल स्वतःच इतर सर्व भागांसाठी कनेक्टिंग लिंक आहे या वस्तुस्थितीमुळे.
कामगिरीमॉडेलमधून प्राप्त केलेला डेटा कोठे आउटपुट केला जातो हे दृश्य आहे योग्य स्वरूपात. MVC पॅटर्न वापरून विकसित केलेल्या पारंपारिक वेब ॲप्लिकेशन्समध्ये, व्ह्यू हा सिस्टमचा एक भाग आहे जिथे HTML कोड व्युत्पन्न केला जातो. नियंत्रकाकडे पाठवण्यासाठी वापरकर्त्याकडून क्रिया प्राप्त करण्यासाठी दृश्य देखील जबाबदार आहे. उदाहरणार्थ, दृश्य मध्ये एक बटण प्रदर्शित करते वापरकर्ता इंटरफेस, आणि दाबल्यानंतर ते संबंधित नियंत्रक क्रिया करते.
दृश्याच्या उद्देशाबद्दल काही गैरसमज आहेत, विशेषत: वेब डेव्हलपर्समध्ये जे नुकतेच MVC वापरून त्यांचे ॲप्लिकेशन तयार करू लागले आहेत. सर्वात सामान्यपणे मोडलेल्या नियमांपैकी एक असा आहे की दृश्याने मॉडेलशी कोणत्याही प्रकारे संवाद साधू नये आणि दृश्याद्वारे प्राप्त केलेला सर्व डेटा केवळ नियंत्रकाकडून आला पाहिजे. व्यवहारात, विकासक अनेकदा या संकल्पनेकडे दुर्लक्ष करतात, जी MVC पॅटर्नचा केंद्रबिंदू आहे. Fabio Cevasco चा लेख अनेक गैर-मानक MVC फ्रेमवर्कपैकी एक, CakePHP वापरून MVC साठी हा गोंधळात टाकणारा दृष्टिकोन स्पष्ट करतो:
हे समजून घेणे अत्यंत महत्त्वाचे आहे की योग्य MVC आर्किटेक्चर मिळविण्यासाठी, दृश्ये आणि मॉडेल्समध्ये कोणताही थेट संवाद असू नये. त्यांच्या दरम्यान डेटाची देवाणघेवाण करण्यासाठी सर्व तर्कशास्त्र नियंत्रकांमध्ये लागू केले जाणे आवश्यक आहे.
याव्यतिरिक्त, एक सामान्य गैरसमज आहे की दृश्य ही फक्त टेम्पलेट फाइल आहे. टॉम बटलरने नमूद केल्याप्रमाणे, हा गैरसमज खूप मोठा आहे कारण अनेक विकासक अगदी सुरुवातीपासूनच MVC संरचनेचा गैरसमज करतात, त्यानंतर ते नवशिक्या विकसकांच्या जनसामान्यांमध्ये हे "ज्ञान" ओतण्यास सुरवात करतात. प्रत्यक्षात, एक दृश्य हे केवळ टेम्पलेटपेक्षा बरेच काही आहे, परंतु MVC पॅटर्नच्या शीर्षस्थानी तयार केलेल्या अनेक फ्रेमवर्कने दृश्याची संकल्पना इतकी विकृत केली आहे की त्यांचे अनुप्रयोग MVC पॅटर्नच्या दृष्टीने योग्य आहेत की नाही याची कोणीही काळजी घेत नाही.
तसेच महत्वाचा मुद्दाव्ह्यू कधीही कंट्रोलरच्या "शुद्ध" डेटासह कार्य करत नाही, म्हणजेच कंट्रोलर मॉडेलला बायपास न करता दृश्यासह कधीही कार्य करत नाही. नियंत्रक आणि दृश्य यांच्यातील संवादादरम्यान, मॉडेल नेहमी त्यांच्या दरम्यान असावे.
नियंत्रककंट्रोलर हा MVC बंडलचा शेवटचा भाग आहे. नियंत्रकाचे कार्य वापरकर्त्याकडून डेटा प्राप्त करणे आणि मॉडेल हाताळणे हे आहे. हा कंट्रोलर आहे आणि फक्त तोच प्रणालीचा भाग आहे जो वापरकर्त्याशी संवाद साधतो.
थोडक्यात, कंट्रोलरचे वर्णन माहिती संग्राहक म्हणून केले जाऊ शकते जे ते प्रक्रिया आणि स्टोरेजसाठी मॉडेलकडे पाठवते. हे डेटासह काहीही करू नये, परंतु केवळ वापरकर्त्याकडून ते प्राप्त करण्यास सक्षम असेल. नियंत्रक एक दृश्य आणि एका मॉडेलशी संबंधित आहे, अशा प्रकारे डेटाचा एक दिशाहीन प्रवाह आयोजित करतो, प्रत्येक टप्प्यावर त्याचे नियंत्रण करतो.
हे लक्षात ठेवणे फार महत्वाचे आहे की नियंत्रक केवळ दृश्यासह वापरकर्त्याच्या परस्परसंवादाच्या परिणामी त्याचे कार्य सुरू करतो, जे संबंधित नियंत्रक कार्याला कॉल करते. विकसकांमधील सर्वात सामान्य चूक म्हणजे कंट्रोलरला दृश्य आणि मॉडेलमधील प्रवेशद्वार म्हणून पाहणे. परिणामी, कंट्रोलरला त्या फंक्शन्ससह संपन्न केले जाते जे दृश्याद्वारे केले जावेत (तसे, दृश्य ही फक्त टेम्पलेट फाइल आहे ही कल्पना येथून येते). त्या वर, बरेच लोक डेटा प्रक्रियेचे सर्व तर्क पूर्णपणे काढून टाकतात, का ते विसरतात MVC नमुनामॉडेल हेतू आहे.
PHP मध्ये MVCमी वरील अंमलबजावणी करण्याचा प्रयत्न करण्याचा सल्ला देतो लहान अनुप्रयोग. चला मॉडेल, व्ह्यू आणि कंट्रोलर वर्ग तयार करून सुरुवात करूया: