Я будую додаток у python із обгорткою python для WPF та з підтримкою DAG. На даний момент я перебуваю на етапі, коли я повинен вирішити послідовний спосіб взаємодії між даними та поданням.
Наскільки я бачу, зараз існує два очевидних рішення.
Перша схожа на структуру програм 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. Не судіть про код - він просто для візуалізації.
Редагувати:
Ще додати - ця програма буде написана пітоном, який підтримує каченя. Це означає, що при другому підході подання все ще може використовуватись до тих пір, поки модель не відповідає необхідному інтерфейсу.