Estoy creando una aplicación en python con un contenedor de python para WPF y con soporte DAG. Actualmente estoy en un punto en el que tengo que decidir una forma consistente de interactuar entre los datos y la vista.
Por lo que veo, actualmente hay dos soluciones obvias.
El primero es similar a cómo están estructuradas las aplicaciones de Android. Tiene un controlador que establece / llena la vista. Por lo tanto, el controlador posee la vista y empuja solo los datos primitivos que se mostrarán. La vista es solo una capa tonta y no tiene idea de lo que está sucediendo y de dónde provienen esos datos. Y luego, si el usuario interactúa con la vista, enviará devoluciones de llamada al controlador (si está registrado).
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)
El segundo es pasar un (referencia de) modelo a la vista y dejar que la vista recupere y actualice los datos. La vista ahora contiene el modelo y, por lo tanto, puede actualizarlo sin ninguna devolución de llamada adicional al controlador.
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)
Entonces, supongo que lo que estoy preguntando es si debo pasar los datos muy primitivos y mantener la vista lo más genérica posible, luego trabajar con devoluciones de llamada y hacer los detalles comerciales en el controlador.
O debería pasar todo el modelo a la vista y dejar que la vista actualice el modelo directamente. Esto significa que habrá menos código para escribir.
PD. No juzgues el código, es solo para visualización.
EDITAR:
También para agregar : esta aplicación se escribirá en python que admite ducktyping. Esto significa que con el segundo enfoque, la vista sigue siendo reutilizable siempre que el modelo cumpla con la interfaz requerida.