我的問題如下。從網頁背景來看,我沒有遇到問題,但在Python桌面應用程序中,我無法真正瞭解根據MVC模式組織代碼的最佳方式。在python桌面GUI中的MVC模式
我想創建一個窗口,根據用戶輸入,按下按鈕時,它會顯示數據庫中可用的類似條目。窗戶是我的看法。
所以基本上這些都是關係:
1)通信控制器 - >視圖
控制器具有的視圖的一個實例,並且可以使用其公開的方法例如view.show_data()。我認爲這是一條路。
# Controller
my_view = View()
...
my_view.show_data(whatever_data)
2)通訊視圖 - >控制器
當用戶將一些文本,在控制器中的方法,已被燒製,以便它可以詢問該模型在必要的數據數據庫。問題是我不知道什麼是視圖告訴控制器必須觸發這種方法的最佳方式。
我的第一個想法是通過控制器到視圖的參考,並綁定視圖上的事件,像這樣:
# Controller
my_view = View(self)
my_model = Model()
...
def on_user_input(self):
# process the input
user_input = ...
self.my_model.method_to_get_info(user_input)
和視圖:
# View
def __init__(self, controller):
self.controller_reference = controller
self.launch_gui()
self.config_binds()
def launch_gui(self):
# ... configure all the GUI itself
self.button = ...
def config_binds(self):
self.button.Bind(wx.EVT_BUTTON, self.controller_reference.on_user_input())
但我認爲這個「閉環」關係不是一個很乾淨的解決方案。視圖在控制器中引用,在視圖中引用控制器。我認爲它在視圖和控制器之間建立了緊密的關係。
這是怎麼回事?
這個問題很可能引發爭議,並不適合StackOverflow的技術問答格式。因此,它可能會以目前的格式被關閉。您可能會在Programmers.StackExchange.com上找到更好的受衆。 –