ฉันกำลังสร้างแอพพลิเคชั่นในไพ ธ อนด้วยไพ ธ อนแรปเปอร์สำหรับ 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)
ดังนั้นฉันเดาว่าสิ่งที่ฉันถามคือฉันควรส่งข้อมูลดั้งเดิมมาก ๆ และรักษามุมมองให้กว้างที่สุดเท่าที่จะเป็นไปได้จากนั้นทำงานกับ callbacks และทำข้อมูลเฉพาะทางธุรกิจในคอนโทรลเลอร์
หรือฉันควรส่งแบบจำลองทั้งหมดไปที่มุมมองและให้มุมมองนั้นอัปเดตโมเดลโดยตรง ซึ่งหมายความว่าจะมีรหัสน้อยลงในการพิมพ์
PS อย่าตัดสินรหัส - เป็นเพียงการสร้างภาพข้อมูล
แก้ไข:
นอกจากนี้เพื่อเพิ่ม - แอปพลิเคชันนี้จะเขียนด้วยไพ ธ อนซึ่งรองรับการพิมพ์เป็ด ซึ่งหมายความว่าด้วยวิธีที่สองมุมมองจะยังสามารถใช้ซ้ำได้ตราบใดที่โมเดลนั้นตอบสนองอินเทอร์เฟซที่จำเป็น