Sto costruendo un'applicazione in python con un wrapper python per WPF e con supporto DAG. Sono attualmente in un punto in cui devo decidere un modo coerente di interagire tra i dati e la vista.
Per quello che vedo, ci sono attualmente due soluzioni ovvie.
Il primo è simile a come sono strutturate le applicazioni Android. Hai un controller che imposta / popola la vista. Quindi il controllore possiede la vista e spinge solo i dati primitivi che verranno visualizzati. La vista è solo un livello stupido e non ha idea di cosa sta succedendo e da dove provengono i dati. E se l'utente interagisce con la vista, invierà le chiamate al controller (se è registrato).
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)
Il secondo sta passando un modello (di riferimento) alla vista e consente alla vista di recuperare e aggiornare i dati. La vista ora contiene il modello e quindi può aggiornarlo senza ulteriori callback al controller.
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)
Quindi immagino che cosa sto chiedendo è, dovrei passare i dati molto primitivi e mantenere la visualizzazione il più generica possibile, quindi lavorare con i callback e fare le specifiche aziendali nel controller.
O devo passare l'intero modello alla vista e lasciare che la vista aggiorni direttamente il modello. Ciò significa che ci sarà meno codice da digitare.
PS. Non giudicare il codice: è solo per la visualizzazione.
EDIT:
Inoltre per aggiungere - questa applicazione sarà scritta in python che supporta il ducktyping. Ciò significa che con il secondo approccio, la vista è ancora riutilizzabile a condizione che il modello soddisfi l'interfaccia richiesta.