Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何实现MVC。是不是太过分了?甚至可能?_Python_Model View Controller - Fatal编程技术网

Python:如何实现MVC。是不是太过分了?甚至可能?

Python:如何实现MVC。是不是太过分了?甚至可能?,python,model-view-controller,Python,Model View Controller,在桌面应用程序中,我正在为城市开发一个模型 class City(object): def __init__(self, name, population): self._name = name self._population = population 我想实现一个edit方法来更改它的私有属性。其思想是打开一个带有文本输入字段的窗口,以便用户可以写入新值。为了使其可测试和解耦,我做了如下工作: # Within City class def edi

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

class City(object):

    def __init__(self, name, population):
        self._name = name
        self._population = population
我想实现一个edit方法来更改它的私有属性。其思想是打开一个带有文本输入字段的窗口,以便用户可以写入新值。为了使其可测试和解耦,我做了如下工作:

# 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),每次我实例我的“城市概念”,我实例模型,但视图和控制器以及。控制器变成了一个“城市”的公共界面,这听起来有些过分,过于复杂

因为web编程,我觉得我误解了真正的MVC模式。

----update--> 正如tereško所说,控制器没有从模型中读取数据。这里定义了维基百科的关系

-----原创--
您的
class-City
是模型,对话框是视图,那么什么是控制器

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

您可以使用控制器提供的所有dialog数据,并远离
class city

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

启动时,显示窗口(对话框?)
查看->(获取数据)控制器->(读取属性)模型
查看(更新模型数据)->模型

视图是否意味着“城市”需要一个模型视图和控制器单元?如果是这样,如果你想举例说明一个“城市”,你会举例说明什么?控制器还是模型?当使用全MVC时,控制器是城市的“公共界面”吗?如果我需要检索模型的属性,我必须调用控制器来调用模型?在MVC设计模式中,控制器不从模型层读取。模型是一个层,而不是一个类。在您的示例中,
城市
实际上是一个,它是模型层的一部分,但不是模型。至于什么时候使用它。。MVC设计模式的目标是为面向对象的代码添加额外的约束,当自由形式的OO代码变得难以管理时(至少超过20k行),MVC模式非常混乱。大多数人都没有正确理解它,在不知道的情况下使用PAC模式。那么,我们对“模型”这个概念的理解是什么呢?域对象不是元素的模型吗?谢谢你的回答。我已经就这个问题写了一篇长篇小说。。假设你可以在示例中处理暴露于php代码的问题。尽管我仍然不了解MVC以及如何做到这一点,但你已经让我大开眼界:模型不是一个类。这种误解来自于使用php MVC框架(根本不是MVC),其中模型是类。感谢你的链接,这可能是我读过的最好的答案之一。请注意:这种误解实际上源于RubyOnRails。它最初的目的是作为一个原型框架,只是为了熟悉起见,对MVC模式使用了相同的名称。当人们开始将其用于其他领域时,问题就开始了。这种极端流行导致了其他语言中的各种克隆(基本上所有最初在2005-2008年间发布的web框架)。