มุมมองที่ควรรู้เกี่ยวกับรูปแบบเท่าไหร่?


10

ฉันกำลังสร้างแอพพลิเคชั่นในไพ ธ อนด้วยไพ ธ อนแรปเปอร์สำหรับ 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 อย่าตัดสินรหัส - เป็นเพียงการสร้างภาพข้อมูล

แก้ไข:

นอกจากนี้เพื่อเพิ่ม - แอปพลิเคชันนี้จะเขียนด้วยไพ ธ อนซึ่งรองรับการพิมพ์เป็ด ซึ่งหมายความว่าด้วยวิธีที่สองมุมมองจะยังสามารถใช้ซ้ำได้ตราบใดที่โมเดลนั้นตอบสนองอินเทอร์เฟซที่จำเป็น

คำตอบ:


3

มุมมอง "ตรรกะ" เท่านั้นที่ควรมีควรเป็นรหัสที่รับผิดชอบในการเปลี่ยนสถานะที่มองเห็นได้ของ GUI ให้กับผู้ใช้ รหัสใด ๆ ที่จัดการกับข้อมูลหรือคำนวณค่าควรได้รับการจัดการที่อื่น

มุมมองของคุณควรรู้ว่าแบบจำลองนั้นมีลักษณะอย่างไร แต่ควรเพิกเฉยต่อพฤติกรรมที่เกี่ยวข้องกับสิ่งใด ๆ ที่ตัวแบบเปิดเผย

การส่งชนิดข้อมูลอย่างง่ายไปยังมุมมองของคุณทำให้ทั้งคู่จัดการกับ GUI และการจัดเก็บสถานะมุมมองซึ่งอาจกลายเป็นเรื่องไม่สะดวก

คุณควรส่งโมเดลโดยตรงไปยังมุมมองหากโมเดลถูกสร้างขึ้นเพื่อจัดการโดยมุมมอง หากแบบจำลองของคุณเป็นแบบเดียวกับที่ใช้โดยกลไกการจัดเก็บข้อมูลของคุณนั่นอาจทำให้เกิดปัญหาตามมาได้หากการแสดงภายในของคุณและการแสดงมุมมองการเบี่ยงเบน (เหมือนที่ทำบ่อย)

โดยทั่วไปคุณควรมี View, View Model, Data Model และบางอย่างเพื่อจัดการตรรกะทางธุรกิจ จากนั้นความกังวลทั้งหมดของคุณจะถูกแยกออกจากกันได้อย่างง่ายดายคุณเพียงแค่ต้องติดกาวเข้าด้วยกัน


1

นี่เป็นคำตอบทั่วไป แต่มุมมอง IMO ควรทำงานให้น้อยที่สุดเท่าที่จะเป็นไปได้ (เช่นตรวจสอบอินพุตของผู้ใช้)

วิธีนี้คุณสามารถคาดหวังว่าตรรกะทั้งหมดของคุณจะอยู่ในตัวควบคุม สิ่งนี้ทำให้การดูแลรักษาถนนเป็นเรื่องง่ายขึ้นหลักการความรับผิดชอบเดี่ยวและทั้งหมดนั้น


ในแนวทางที่สองตรรกะจะยังคงอยู่ในมุมมองโมเดลไม่ใช่ในมุมมอง
Arturs Vancans
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.