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