Форум сайта python.su
0
ребята, оцените пожалуйста мой первый в жизни mvc. только не говорите, что для это задачи он не нужен, это просто пример
class RunnerModel(object):
def __init__(self, name, height):
''' default height in mm '''
self.name = name
self.height = height
class RunnerView(object):
def __init__(self, model):
self.model = model
def output_height_in_m(self):
print('runner name: ' + str(self.model.name))
print('runner height(m):' + str(self.model.height/1000))
def output_height_in_cm(self):
print('runner name: ' + str(self.model.name))
print('runner height(cm):' + str(self.model.height/10))
class RunnerController(object):
def __init__(self, model, measure):
self.model = model
self.view = RunnerView(self.model)
self.measure = measure
def output(self):
if self.measure == 'm':
self.view.output_height_in_m()
elif self.measure == 'cm':
self.view.output_height_in_cm()
if __name__ == "__main__":
runner_1 = RunnerModel(name='sergey', height=1820)
controller_1 = RunnerController(runner_1, 'cm')
controller_1.output()
controller_1 = RunnerController(runner_1, 'm')
controller_1.output()
def output_m(self):
self.view.output_height_in_m()
def output_cm(self):
self.view.output_height_in_cm()
Отредактировано zlodiak (Дек. 10, 2015 14:35:19)
Офлайн
20
zlodiakСкажу пока только о том, что заметил с первого взгляда. Ваша модель (класс RunnerModel) является просто структурой данных, без методов их обрабатывающих. Это примерно похоже на доступ к пассивному хранилищу данных в СУБД. В общем, ваша модель - это пассивная модель.
ребята, оцените пожалуйста мой первый в жизни mvc. только не говорите, что для это задачи он не нужен, это просто пример
Офлайн
0
old_monty, спасибо за ответ. если я встрою в модель паттерн Наблюдатель/подписчик это сделает модель активной?
а по поводу нескольких представлений не понял. у меня же специально для генерации различных представлений есть в RunnerView методы:
output_height_in_m,
output_height_in_сm
упрощённо это и есть excel-таблица и диаграмма, про которые вы писали
Офлайн
20
zlodiakДумаю, да. Модель должна рассылать сообщения, а представление должно подписываться на эти сообщения. Подписка на сообщение означает, что при поступлении определенного сообщения представление вызовет свой соответствующий метод.
old_monty, спасибо за ответ. если я встрою в модель паттерн Наблюдатель/подписчик это сделает модель активной?
zlodiakРазличные методы в классе представления у вас есть, согласен. Пока не могу сказать, правильно так делать или нет.
а по поводу нескольких представлений не понял. у меня же специально для генерации различных представлений есть в RunnerView методы: output_height_in_m, output_height_in_сm упрощённо это и есть excel-таблица и диаграмма, про которые вы писали
zlodiakПосмотрел еще раз и вот что думаю. Это сходство, о котором вы говорите, очень отдаленное, если вообще имеется. В Excel изменение данных в модели автоматически приводит к одновременному обновлению всех представлений (таблицы и диаграммы). А у вас два метода независимы друг от друга. Если обновились данные в модели, а был вызван только один метод (рост в метрах), то ранее выведенный рост в сантиметрах сам по себе не обновится.
упрощённо это и есть excel-таблица и диаграмма, про которые вы писали
Отредактировано old_monty (Дек. 11, 2015 13:20:00)
Офлайн