Python:如何实现MVC?是否太复杂了?真的可行吗?
在一个桌面应用程序中,我正在开发一个关于城市的模型。
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模式有些误解,可能是因为我之前接触的都是网页编程。
1 个回答
-1
----- 更新 ----
正如tereško所说,控制器并不是从模型中读取数据。关于这种关系,可以参考维基百科的解释 http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
----- 原文 ---
你的 class City
是模型,而对话框是视图,那么控制器是什么呢?
我觉得你需要另一个类来处理“模型编辑”。
所有对话框的数据都是由控制器提供的,和 class City
保持距离。
我试着用数据流来描述我的想法。
启动时,显示窗口(对话框?)
视图 -> (获取数据) 控制器 -> (读取属性) 模型
视图 <- 控制器 <- 模型 (返回数据)
你想修改数据
视图 -> (发送修改后的数据到) 控制器 -> (更新模型数据) -> 模型
视图 <- 控制器 <- 模型 (你的对话框显示更新后的内容)