我正在使用WPF和DAG支持的python包装器在python中构建应用程序。目前,我必须决定在数据和视图之间进行交互的一致方式。
据我所知,目前有两种明显的解决方案。
第一个类似于Android应用程序的结构。您有一个设置/填充视图的控制器。因此,控制器拥有该视图并仅推送将要显示的原始数据。视图只是一个愚蠢的层,不知道发生了什么以及数据来自何处。然后,如果用户与视图交互,它将向控制器发送回调(如果已注册)。
UserInfoController.py
userInfoView = UserInfoView()
userInfoView.onGenderChangedCallback = self.onGenderChangedCallback
userInfoView.setUserGenderValue(user.getGender())
UserInfoView.py
def setUserGenderValue(self, gender):
self.userGender = gender
def getView(self):
return ui.Label(self.userGender, onEditCallback=self.onGenderChangedCallback)
第二个方法是将(引用)模型传递给视图,并让视图检索和更新数据。视图现在包含模型,因此它可以更新模型而无需对控制器进行任何其他回调。
UserInfoViewModel.py
self.gender = 'Male'
UserInfoView.py
def getView(self):
return ui.Label(self.ViewModel().getGender(), onEdited=self.genderEdited)
def genderEdited(self, newValue):
self.ViewModel().setGender(newValue)
所以我想我要问的是,我应该传递非常原始的数据并保持视图尽可能通用,然后使用回调并在控制器中处理业务细节。
还是应该将整个模型传递给视图,然后让视图直接更新模型。这意味着将要键入的代码更少。
PS。不要判断代码-只是为了可视化。
编辑:
另外要补充 -此应用程序将使用支持鸭型的python编写。这意味着使用第二种方法,只要模型满足所需的接口,视图仍然可以重用。