मॉडल व्यू कंट्रोलर पैटर्न

मॉडल व्यू कंट्रोलर सबसे अधिक इस्तेमाल किया जाने वाला डिज़ाइन पैटर्न है। डेवलपर्स को इस डिज़ाइन पैटर्न को लागू करना आसान लगता है।

निम्नलिखित मॉडल व्यू कंट्रोलर की एक बुनियादी वास्तुकला है -

आइए अब देखते हैं कि संरचना कैसे काम करती है।

नमूना

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

राय

देखें HTML फ़ाइलों का प्रतिनिधित्व करती है, जो अंत उपयोगकर्ता के साथ बातचीत करती हैं। यह उपयोगकर्ता को मॉडल के डेटा का प्रतिनिधित्व करता है।

नियंत्रक

यह दृश्य और मॉडल के बीच मध्यस्थ के रूप में कार्य करता है। यह उसी के लिए दृश्य और क्वेरीज़ मॉडल द्वारा ट्रिगर की गई घटनाओं को सुनता है।

पायथन कोड

आइए हम "व्यक्ति" नामक एक मूल वस्तु पर विचार करें और एक एमवीसी डिज़ाइन पैटर्न बनाएं।

Model.py

import json

class Person(object):
   def __init__(self, first_name = None, last_name = None):
      self.first_name = first_name
      self.last_name = last_name
   #returns Person name, ex: John Doe
   def name(self):
      return ("%s %s" % (self.first_name,self.last_name))
		
   @classmethod
   #returns all people inside db.txt as list of Person objects
   def getAll(self):
      database = open('db.txt', 'r')
      result = []
      json_list = json.loads(database.read())
      for item in json_list:
         item = json.loads(item)
         person = Person(item['first_name'], item['last_name'])
         result.append(person)
      return result

यह एक विधि के लिए कहता है, जो डेटाबेस में व्यक्ति तालिका के सभी रिकॉर्ड प्राप्त करता है। रिकॉर्ड JSON प्रारूप में प्रस्तुत किए जाते हैं।

राय

यह मॉडल के भीतर प्राप्त सभी रिकॉर्ड प्रदर्शित करता है। कभी भी मॉडल के साथ बातचीत न करें; नियंत्रक यह काम करता है (मॉडल और दृश्य के साथ संचार)।

from model import Person
def showAllView(list):
   print 'In our db we have %i users. Here they are:' % len(list)
   for item in list:
      print item.name()
def startView():
   print 'MVC - the simplest example'
   print 'Do you want to see everyone in my db?[y/n]'
def endView():
   print 'Goodbye!'

नियंत्रक

नियंत्रक मॉडल के माध्यम से बातचीत करता है getAll() विधि जो अंतिम उपयोगकर्ता के लिए प्रदर्शित सभी रिकॉर्ड प्राप्त करती है।

from model import Person
import view

def showAll():
   #gets list of all Person objects
   people_in_db = Person.getAll()
   #calls view
   return view.showAllView(people_in_db)

def start():
   view.startView()
   input = raw_input()
   if input == 'y':
      return showAll()
   else:
      return view.endView()

if __name__ == "__main__":
   #running controller function
   start()