Model Görünümü Denetleyici Kalıbı

Model View Controller, en yaygın kullanılan tasarım modelidir. Geliştiriciler bu tasarım modelini uygulamayı kolay buluyor.

Aşağıda Model Görünüm Denetleyicisinin temel bir mimarisi verilmiştir -

Şimdi yapının nasıl çalıştığını görelim.

Modeli

Veritabanıyla etkileşime giren saf uygulama mantığından oluşur. Verileri son kullanıcıya temsil edecek tüm bilgileri içerir.

Görünüm

Görünüm, son kullanıcıyla etkileşime giren HTML dosyalarını temsil eder. Modelin verilerini kullanıcıya gösterir.

Kontrolör

Görünüm ve model arasında bir aracı görevi görür. Aynı şekilde view ve sorgu modelinin tetiklediği olayları dinler.

Python kodu

"Kişi" adlı temel bir nesneyi düşünelim ve bir MVC tasarım modeli oluşturalım.

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

Veritabanındaki Person tablosunun tüm kayıtlarını getiren bir yöntemi çağırır. Kayıtlar JSON formatında sunulmaktadır.

Görünüm

Model içinde getirilen tüm kayıtları görüntüler. View asla modelle etkileşim kurmaz; denetleyici bu işi yapar (model ve görünüm ile iletişim kurar).

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!'

Kontrolör

Denetleyici, modelle etkileşime girer. getAll() Son kullanıcıya görüntülenen tüm kayıtları getiren yöntem.

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()