Bao nhiêu nên xem về mô hình?


10

Tôi đang xây dựng một ứng dụng trong python với trình bao bọc python cho WPF và với sự hỗ trợ của DAG. Tôi hiện đang ở thời điểm mà tôi phải quyết định một cách tương tác nhất quán giữa dữ liệu và chế độ xem.

Theo tôi thấy hiện có hai giải pháp rõ ràng.

Đầu tiên là tương tự như cách các ứng dụng Android được cấu trúc. Bạn có một bộ điều khiển thiết lập / điền vào khung nhìn. Vì vậy, bộ điều khiển sở hữu chế độ xem và chỉ đẩy dữ liệu nguyên thủy sẽ được hiển thị. Khung nhìn chỉ là một lớp câm và không biết chuyện gì đang xảy ra và dữ liệu đó đến từ đâu. Và sau đó nếu người dùng tương tác với khung nhìn, nó sẽ gửi các cuộc gọi lại đến bộ điều khiển (nếu nó đã đăng ký).

UserInfoControll.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)

Thứ hai là chuyển một mô hình (tham chiếu) cho chế độ xem và để chế độ xem lấy và cập nhật dữ liệu. Khung nhìn bây giờ chứa mô hình và do đó nó có thể cập nhật nó mà không cần bất kỳ cuộc gọi lại bổ sung nào cho bộ điều khiển.

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)

Vì vậy, tôi đoán những gì tôi đang hỏi là, tôi có nên truyền dữ liệu rất nguyên thủy và giữ chế độ xem càng chung chung càng tốt, sau đó làm việc với các cuộc gọi lại và thực hiện các chi tiết cụ thể trong bộ điều khiển.

Hoặc tôi nên chuyển toàn bộ mô hình cho chế độ xem và để chế độ xem cập nhật mô hình trực tiếp. Điều này có nghĩa là sẽ có ít mã để gõ.

Tái bút Đừng phán xét mã - nó chỉ để trực quan hóa.

BIÊN TẬP:

Ngoài ra để thêm - ứng dụng này sẽ được viết bằng python hỗ trợ vịt. Điều này có nghĩa là với cách tiếp cận thứ hai, khung nhìn vẫn có thể sử dụng lại được miễn là mô hình đáp ứng giao diện được yêu cầu.

Câu trả lời:


3

"Logic" duy nhất mà một khung nhìn nên chứa, phải là mã chịu trách nhiệm thay đổi trạng thái hiển thị của GUI cho người dùng. Bất kỳ mã nào thao túng dữ liệu hoặc tính toán một giá trị nên được xử lý ở một nơi khác.

Quan điểm của bạn nên biết mô hình trông như thế nào, nhưng nên không biết gì về hành vi liên quan đến bất kỳ điều gì mà mô hình phơi bày.

Truyền các kiểu dữ liệu đơn giản vào chế độ xem của bạn làm cho nó chịu trách nhiệm cho cả thao tác GUI và lưu trữ trạng thái xem, điều này có thể dễ dàng trở nên khó sử dụng.

Bạn nên chuyển mô hình trực tiếp vào khung nhìn nếu mô hình được xây dựng để thao tác bởi khung nhìn. Nếu mô hình của bạn giống với mô hình được sử dụng bởi cơ chế lưu trữ dữ liệu của bạn, điều đó có thể gây ra sự cố nếu đại diện bên trong của bạn và xem phân kỳ đại diện (như thường làm).

Về cơ bản, bạn chỉ cần có Chế độ xem, Mô hình xem, Mô hình dữ liệu và một cái gì đó để xử lý logic nghiệp vụ. Sau đó, tất cả các mối quan tâm của bạn dễ dàng tách ra, bạn chỉ cần dán chúng lại với nhau.


1

Đây có thể là một câu trả lời khái quát, nhưng chế độ xem IMO nên thực hiện ít công việc nhất có thể (ví dụ: xác thực đầu vào của người dùng).

Bằng cách này bạn có thể mong đợi tất cả logic của bạn nằm trong bộ điều khiển. Điều này làm cho nó dễ dàng hơn nhiều để duy trì xuống đường, nguyên tắc trách nhiệm duy nhất, và tất cả những thứ đó.


Theo cách tiếp cận thứ hai, logic vẫn sẽ nằm trong mô hình khung nhìn chứ không phải trong khung nhìn.
Arturs Wrapsans 27/08/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.