Saya membangun aplikasi dalam python dengan pembungkus python untuk WPF dan dengan dukungan DAG. Saat ini saya berada pada titik di mana saya harus memutuskan cara yang konsisten untuk berinteraksi antara data dan tampilan.
Sejauh yang saya lihat saat ini ada dua solusi yang jelas.
Yang pertama mirip dengan bagaimana Aplikasi Android disusun. Anda memiliki pengontrol yang mengatur / mengisi tampilan. Jadi pengontrol memiliki pandangan dan hanya mendorong data primitif yang akan ditampilkan. Tampilan hanya lapisan bodoh dan tidak tahu apa yang terjadi dan dari mana data itu berasal. Dan kemudian jika pengguna berinteraksi dengan tampilan, itu akan mengirim panggilan balik ke controller (jika terdaftar).
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)
Yang kedua adalah meneruskan (referensi) model ke tampilan dan membiarkan tampilan untuk mengambil dan memperbarui data. Tampilan sekarang berisi model dan karena itu dapat memperbaruinya tanpa panggilan balik tambahan ke 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)
Jadi saya kira apa yang saya tanyakan adalah, apakah saya harus melewatkan data yang sangat primitif dan menjaga tampilan se generik mungkin, kemudian bekerja dengan callback dan melakukan spesifik bisnis di controller.
Atau haruskah saya meneruskan seluruh model ke tampilan dan membiarkan tampilan untuk memperbarui model secara langsung. Ini berarti bahwa akan ada lebih sedikit kode untuk diketik.
PS. Jangan menilai kode - itu hanya untuk visualisasi.
EDIT:
Juga untuk menambah - aplikasi ini akan ditulis dalam python yang mendukung ducktyping. Ini berarti bahwa dengan pendekatan kedua, tampilan masih dapat digunakan kembali selama model memenuhi antarmuka yang diperlukan.