Bir görünüm model hakkında ne bilmeli?


10

WPF için bir python sarıcı ve DAG desteği ile python bir uygulama inşa ediyorum. Şu anda veri ve görünüm arasında tutarlı bir etkileşim şekline karar vermem gereken bir noktadayım.

Gördüğüm kadarıyla şu anda iki belirgin çözüm var.

Birincisi Android Uygulamalarının nasıl yapılandırıldığına benzer. Görünümü ayarlayan / dolduran bir denetleyiciniz var. Böylece denetleyici görünüme sahiptir ve yalnızca görüntülenecek ilkel verileri iter. Görünüm sadece aptal bir katman ve ne olduğu ve bu verinin nereden geldiği hakkında hiçbir fikri yok. Ve sonra kullanıcı görünümle etkileşime girerse, denetleyiciye geri çağrılar gönderir (kayıtlıysa).

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)

İkincisi , görünüme (başvurusu) bir model geçirerek görünümün verileri almasına ve güncellemesine izin vermektir. Görünüm şimdi modeli içerir ve bu nedenle denetleyiciye herhangi bir ek geri arama yapmadan güncelleyebilir.

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)

Bu yüzden sorduğum şey, çok ilkel verileri geçip görünümü olabildiğince genel tutmalı mıyım, sonra geri aramalarla çalışmalı ve denetleyicideki iş özelliklerini yapmalıyım.

Veya tüm modeli görünüme geçirmeli ve görünümün modeli doğrudan güncellemesine izin vermeliyim. Bu, yazmak için daha az kod olacağı anlamına gelir.

PS. Kodu yargılamayın - sadece görselleştirme içindir.

DÜZENLE:

Ayrıca eklemek için - bu uygulama ducktyping destekleyen python yazılacak. Bu, ikinci yaklaşımla, gerekli arabirimi karşılayan model olduğu sürece görünümün yeniden kullanılabilir olduğu anlamına gelir.

Yanıtlar:


3

Bir görünümün içermesi gereken tek "mantık", kullanıcı arayüzünün görünür durumunu değiştirmekle sorumlu olan kod olmalıdır. Verileri işleyen veya bir değeri hesaplayan herhangi bir kod başka bir yerde kullanılmalıdır.

Görüşünüz, modelin neye benzediğini bilmeli, ancak modelin ortaya koyduğu herhangi bir şeyle ilişkili davranışı bilmemelidir.

Basit veri türlerini görünümünüze aktarmak, hem GUI'yi manipüle etmekten hem de kolayca rahatsız edici olabilecek görünüm durumunu depolamaktan sorumlu olur.

Model görünüm tarafından manipülasyon için oluşturulmuşsa, modeli doğrudan görünüme geçirmelisiniz. Modeliniz veri depolama mekanizmanız tarafından kullanılanla aynıysa, dahili temsiliniz ve görünüm temsiliniz farklıysa (genellikle olduğu gibi) yolda sorunlara neden olabilir.

Temel olarak, sadece bir Görünüm, Görünüm Modeli, Veri Modeli ve iş mantığını işlemek için bir şey olmalıdır. Sonra tüm endişeleriniz kolayca ayrılır, sadece onları yapıştırmanız gerekir.


1

Bu biraz genelleştirilmiş bir yanıttır, ancak IMO görünümü mümkün olan en az işi yapmalıdır (örn. Kullanıcı girişlerini doğrulayın).

Bu şekilde, tüm mantığınızın denetleyicide olmasını bekleyebilirsiniz. Bu, yolda, tek sorumluluk prensibinde ve tüm bunların bakımını kolaylaştırır.


İkinci yaklaşımda mantık hala görünümde değil, görünüm modelinde olacaktır.
Arturs Vancans
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.