Sorun MVC
şu ki, insanlar görüşün, kontrolörün ve modelin birbirinden mümkün olduğunca bağımsız olması gerektiğini düşünüyorlar. Bir görüş ve denetleyici genellikle iç içe geçmezler - bunu düşünün M(VC)
.
Kontrolör, kullanıcı arayüzünün, özellikle GUI'lerle birlikte görünümde genellikle karışık olan giriş mekanizmasıdır. Yine de, görünüm çıktı ve denetleyici girdi. Bir görünüm genellikle karşılık gelen bir denetleyici olmadan çalışabilir, ancak bir denetleyici görünüm olmadan genellikle çok daha az kullanışlıdır. Kullanıcı dostu kontrolörler, görünümü kullanıcının girdisini daha anlamlı ve sezgisel bir şekilde yorumlamak için kullanır. Denetleyici konseptini görünümden ayırmayı zorlaştıran da budur.
Mühürlü bir kutudaki algılama alanındaki radyo kontrollü bir robotu model olarak düşünün.
Model, hiçbir çıkış (ekran) kavramı olmayan veya durum geçişlerini tetikleyen şey olan durum ve durum geçişleri ile ilgilidir. Robotun sahada pozisyonunu alabilirim ve robot pozisyonu nasıl değiştireceğini bilir (ileri / geri / sola / sağa doğru bir adım atın.
Denetleyici olmadan bir görünümü düşünün, örneğin robot konumunu izleyen başka bir odada ağdaki başka bir odada bulunan biri, (x, y) bir kaydırma konsolundan aşağı akış koordinasyonunu izler. Bu görüş sadece modelin durumunu gösteriyor, ancak bu adamın denetleyicisi yok. Yine, bu görüşü bir kontrolör olmadan hayal etmek kolaydır.
Görünümü olmayan bir denetleyiciyi düşünün, örneğin, radyo denetleyicisinin robotun frekansına ayarlanmış olduğu bir dolaba kilitli biri. Bu denetleyici girdi gönderir ve modele ne yaptıklarına dair hiçbir fikre sahip olmadan durum geçişlerine neden olur (eğer varsa). Öngörülmesi kolay, ancak görünümden bir tür geri bildirim olmadan gerçekten kullanışlı değil.
Çoğu kullanıcı dostu kullanıcı arayüzü, daha sezgisel bir kullanıcı arayüzü sağlamak için görünümü denetleyiciyle koordine eder. Örneğin, robotun mevcut konumunu 2 boyutlu olarak gösteren ve kullanıcının ekranda robotun önünde olan noktaya dokunmasına izin veren dokunmatik ekrana sahip bir görünüm / denetleyici hayal edin. Denetleyicinin, görüntü ile ilgili ayrıntılara ihtiyacı vardır, örneğin görünüm penceresinin konumu ve ölçeği ve robotun ekrandaki piksel konumuna göre dokunulan noktanın piksel konumu) bunu doğru bir şekilde yorumlamak için radyo denetleyicisi).
Sorunuzu henüz yanıtladım mı? :-)
Denetleyici, modelin geçiş durumuna neden olmak için kullanılan kullanıcıdan girdi alan herhangi bir şeydir. Görünümü ve denetleyiciyi ayrı tutmaya çalışın, ancak genellikle birbirine bağımlı olduklarını anlayın, bu nedenle aralarındaki sınır bulanıksa, yani görünüm ve denetleyicinin ayrı paketler olarak olması, temiz bir şekilde ayrılmayabilir. gibi, ama sorun değil. Görünüm modelden olduğu için denetleyicinin görünümden temiz bir şekilde ayrılmayacağını kabul etmeniz gerekebilir.
... Kontrolörde herhangi bir doğrulama vb. yapılmalı mı? Öyleyse, Hata mesajlarını Görünüm'e nasıl geri gönderirim - bu Modelden tekrar geçmeli mi yoksa Denetleyici doğrudan doğrudan Görünüm'e göndermeli mi?
Doğrulama Görünüm'de yapılırsa, Denetleyiciye ne koyabilirim?
Bağlantılı bir görüş ve denetleyicinin modelden geçmeden serbestçe etkileşim kurması gerektiğini söylüyorum. Denetleyici kullanıcının girişini alır ve doğrulamayı yapmalıdır (belki modelden ve / veya görünümden bilgi kullanarak), ancak doğrulama başarısız olursa, denetleyici ilgili görünümünü doğrudan güncelleyebilmelidir (örn. Hata mesajı).
Bunun için asit testi, bağımsız bir görüşün (diğer bir odadaki robot konumunu ağ üzerinden izleyen adamın) başka birinin doğrulama hatasının (örneğin dolaptaki adam) bir şey görüp görmeyeceğini sormasıdır. robota alandan çıkmasını söylemeye çalıştı). Genellikle, cevap hayırdır - doğrulama hatası durum geçişini engelledi. Devlette herhangi bir engel yoksa (robot hareket etmedi), diğer görüşleri söylemeye gerek yoktur. Dolaptaki adam, yasadışı bir geçişe (görünüm yok - kötü kullanıcı arayüzü) neden olmaya çalıştığı hakkında herhangi bir geri bildirim almadı ve başka kimsenin bunu bilmesine gerek yok.
Dokunmatik ekranı olan adam robotu sahadan göndermeye çalıştıysa, robotu algılama alanından göndererek öldürmemesini isteyen güzel bir kullanıcı dostu mesaj aldı, ama yine de, başka kimsenin bunu bilmesine gerek yok.
Diğer görünümler Eğer do Bu hatalarla ilgili bilmeniz gereken, o zaman etkili bir kullanıcıdan giriş ve herhangi çıkan hataların olduğunu söylediğini modelin parçası ve her şey biraz daha karmaşık olduğunu ...