Oop 将输出从控制器传递到模型以查看是否违反MVC?
假设我想输出一条消息“hi”。字符串在控制器类中创建,然后传递给模型类中的处理程序,然后传递给视图类中的输出函数 e、 g “controller”从未触及视图,但像这样将字符串传递给类似乎有点让我不安,因为我几乎可以一开始就键入Oop 将输出从控制器传递到模型以查看是否违反MVC?,oop,model-view-controller,architecture,Oop,Model View Controller,Architecture,假设我想输出一条消息“hi”。字符串在控制器类中创建,然后传递给模型类中的处理程序,然后传递给视图类中的输出函数 e、 g “controller”从未触及视图,但像这样将字符串传递给类似乎有点让我不安,因为我几乎可以一开始就键入print('hi'),这显然违反了MVC原则。简而言之: 控制器:处理用户请求,如单击按钮(用于桌面应用程序)或发送表单(用于web) 模型:处理数据,如何表示、存储和检索数据 视图:处理用户真正看到的视觉部分 关于您的代码,这是错误的,模型应该对视图一无所知 M
print('hi')
,这显然违反了MVC原则。简而言之:
- 控制器:处理用户请求,如单击按钮(用于桌面应用程序)或发送表单(用于web)
- 模型:处理数据,如何表示、存储和检索数据
- 视图:处理用户真正看到的视觉部分
class Controller:
def __init__(self):
self.model = Model()
self.view = View()
def messageHandler(self):
self.view.display_my_message(self.model.getMessage())
class Model:
def __init__(self):
pass
def getMessage(self):
return 'hi'
class View:
def display_my_message(self, message)
print(message)
在第二个示例中,当您可以订阅视图以查看模型中的更改时,使用。当进行更改时,模型会通知观察者,观察者随后可以采取行动
class Controller:
def __init__(self):
self.model = Model()
def messageHandler(self):
self.model.putMessage('hi')
class Model:
def __init__(self):
self.subscribers = []
self.message = ''
def attach(subscriber):
self.subscribers.append(subscriber)
def notify():
for s in self.subscribers:
s.update()
def putMessage(self, message):
self.message = message
self.notify()
def getMessage(self):
return self.message
class View:
def update(self, message)
print(message)
注意:我不习惯用python编程,可能有一些语法错误。将字符串传递给模型绝对没有问题;MVC是一种分层体系结构。在分层体系结构中,您可以自由地从应用程序层(控制器)移动到下面的域层(模型)。请注意,我将变量的传递描述为“移动” 因此: 您可以使用变量从控制器调用模型中的函数。 类控制器 { void方法() { Model.call('yourstring'); } } 但是,您不应该从模型向上移动到控制器
您的模型将使用此字符串执行某些操作(可能会自我更新),在良好的ol'MVC中,更改将触发视图上的事件。@downvorters,介意评论吗?@pétur,感谢您的编辑
class Controller:
def __init__(self):
self.model = Model()
self.view = View()
def messageHandler(self):
self.view.display_my_message(self.model.getMessage())
class Model:
def __init__(self):
pass
def getMessage(self):
return 'hi'
class View:
def display_my_message(self, message)
print(message)