0

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

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 呢?

我的想法是拥有三个类(MVC),每次我实例化我的“城市概念”时,我都会实例化模型,但也会实例化视图和控制器。而Controller变成了“City”的公共接口这听起来有点矫枉过正,过于复杂了。

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

4

1 回答 1

-1

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

----- 原创 ---
class City是模型,对话框是视图,所以控制器是什么。

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

控制器提供的所有对话数据并远离class city.

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

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

您要修改数据
视图 ->(将修改后的数据发送到)控制器 ->(更新模型数据)-> 模型
视图 <- 控制器 <- 模型(您的对话框显示已更新)

于 2013-03-14T11:49:52.473 回答