nachdem ich mir einige Beispiele zum MVC-Pattern angeschaut habe, bleibt für mich erstmal eine Frage: Welchen Vorteil hat es, einen observer (oder wie immer man das dann nennen mag) einzubauen?
Ich hab' mal 2 ganz simple Beispiele geschrieben, anhand derer das für mich noch nicht wirklich ersichtlich ist. Aber irgendeinen Grund muss es ja geben, oder?
Ohne observer:
Code: Alles auswählen
class Model(object):
def set_data(self, data):
self.data = data
class View(object):
def output(self, data):
print '-' * 15
print 'Ihre Eingabe war:'
print 'Vorname: %s\nNachname: %s' % data
print '-' * 15
def input(self):
first = raw_input('Vorname : ')
last = raw_input('Nachname: ')
return first, last
def question(self):
another = raw_input('Weitere Eingabe (j/n)? ')
return another
def control():
model = Model()
view = View()
another = ''
while another != 'n':
model.set_data(view.input())
view.output(model.data)
another = view.question()
if __name__ == '__main__':
control()
Code: Alles auswählen
class Observer(object):
def __init__(self):
self.callbacks = []
def add_callback(self, func):
self.callbacks.append(func)
def run_callbacks(self):
for func in self.callbacks:
func(self.data)
def set_data(self, data):
self.data = data
self.run_callbacks()
class Model(object):
def __init__(self):
self.data = Observer()
def set_data(self, data):
self.data.set_data(data)
class View(object):
def output(self, data):
print '-' * 15
print 'Ihre Eingabe war:'
print 'Vorname: %s\nNachname: %s' % data
print '-' * 15
def input(self):
first = raw_input('Vorname : ')
last = raw_input('Nachname: ')
return first, last
def question(self):
another = raw_input('Weitere Eingabe (j/n)? ')
return another
def control():
model = Model()
view = View()
model.data.add_callback(view.output)
another = ''
while another != 'n':
model.set_data(view.input())
another = view.question()
if __name__ == '__main__':
control()