Python:如何实现MVC。这有点矫枉过正吗?甚至可能?

时间:2013-03-14 10:39:17

标签: python model-view-controller

在桌面应用程序中,我正在为城市开发一个模型。

class City(object):

    def __init__(self, name, population):
        self._name = name
        self._population = population

我希望实现一个编辑方法来更改其私有属性。我们的想法是打开一个带有文本输入字段的窗口,以便用户可以编写新值。为了使它可测试和解耦,我这样做了:

# Within City class
def edit(self, get_properties_function=None):
    """
    Edit properties. Don't pass get_properties_function except for testing
    """

    if get_properties_function is None:
        get_properties_function = self._get_city_properties

    new_name, new_population = get_new_properties()

    self._name = new_name
    self._population = new_population

def _get_city_properties(self):

    # launch GUI and get the new values

    return new_name, new_population

现在问题:

  • 要求提供信息的对话框是一个视图,对吧?这引导我进入下一个问题
  • 如果我有观点,我想我应该进一步考虑实施一个控制器。那么,如何在这里实施MVC?

我的想法是有三个班级(M-V-C),每次我实施我的“城市概念”,我实例化模型,但视图和控制器也是如此。控制器成为“城市”的公共界面这听起来有点过分,过于复杂。

由于网络编程,我觉得我误解了真正的MVC模式。

1 个答案:

答案 0 :(得分:-1)

-----更新----
正如tereško所说控制器没有从模型中读取。这段关系在这里定义维基百科http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

-----原创---
你的class City是模型,对话框是可见的,所以控制器是什么。

我认为你需要另一个类来处理“模型编辑”。

控制器提供的所有对话框数据,并与class city保持一致。

我试图通过数据流描述我的观点。

启动,显示窗口(对话框?)
查看 - > (获取数据)控制器 - > (阅读属性)模型
查看< - Controller< - 模型(返回数据)

您想修改数据
查看 - > (将修改后的数据发送到)控制器 - > (更新模型数据) - >型号
查看< - Controller< - 模型(您的对话框显示已更新)