是否将控制器的输出传递给模型以查看违反MVC的情况?

时间:2013-09-06 05:16:55

标签: oop model-view-controller architecture

假设我要输出消息“hi”。该字符串在控制器类中创建,然后传递给模型类中的处理程序,然后传递给视图类中的输出函数。

e.g。

class Controller:
  def __init__(self):
    self.model = Model()
  def myMessage(self):
    self.model.messageHandler('hi')

class Model:
  def __init__(self):
    self.view = View()
  def messageHandler(self, msg):
    self.view.display_my_message(msg)

class View:
  def display_my_message(self, message)
    print(message)

“控制器”从不接触视图,但是将字符串传递给类似的类似乎对我有点不安,因为它几乎就像我最初只能键入print('hi')一样,这显然很明显违反了MVC原则。

2 个答案:

答案 0 :(得分:1)

简短地说:

  • 控制器:处理用户请求,例如点击按钮(用于桌面应用程序)或发送表单(用于网络)
  • 模型:处理数据,如何表示,存储和检索数据。
  • 观点:处理视觉部分,用户真正看到的内容。

关于您的代码,这是错误的,模型应该知道关于视图的 NOTHING

MVC有两种主要方法:被动模式和主动模型。

在第一个中,控制器是模型中数据与视图中表示之间的中介。

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)

在第二个中,当您可以订阅视图以观察模型中的更改时,可以使用Observer Pattern。进行更改后,模型会通知其观察者,然后他们可以采取行动。

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)

P.S。:我不习惯在python中编程,也许有一些合成错误。

答案 1 :(得分:-2)

将字符串传递给模型肯定是可以的; MVC是一种分层架构。在分层体系结构中,您可以从应用程序层(控制器)自由地“移动”到下面的域层(模型)。请注意,我将变量描述为“移动”。

所以: 您可以使用变量从控制器调用模型中的函数。     班级管制员     {       void方法()       {         Model.call( 'yourstring');       }     }

但是,您不应该从模型向上移动到控制器。

你的模型会对这个字符串做一些事情(可能会更新自己),并且在好的MVC中,更改将触发视图上的事件。