Harika soru!
Dünya çapında web geliştirme açısından, aşağıdakileri de sorarsanız ne olur.
"Bir kullanıcı arabiriminden denetleyiciye hatalı kullanıcı girişi sağlanıyorsa , denetleyici Görünüm'ü bir tür döngüsel döngüde güncellemeli, komutları ve giriş verilerini işlemeden önce doğru olmasını zorlamalı mı? Nasıl? Görünüm normal altında nasıl güncellenir? Koşullar view Bir modele sıkıca bağlanmış bir görünüm var mı? Kullanıcı girişi doğrulama , modelin ana iş mantığı mıdır , yoksa bunun için bir ön çalışma mıdır ve bu nedenle kontrolörün içinde gerçekleşmesi gerekir mi (kullanıcı girişi verileri isteğin bir parçası olduğu için)?
(İyi bir giriş elde edilinceye kadar bir modelin başlatılmasını geciktiren bir gecikme olabilir mi?)
Benim düşüncem, modellerin saf ve bozulmamış bir durumu (mümkün olduğunca) yönetmesi gerektiği, model başlatılmadan önce (ve kesinlikle model girdi verisi alınmadan önce) gerçekleşmesi gereken temel HTTP istek girişi doğrulaması ile numaralandırılmaması gerektiğidir. Durum verilerini yönetmek (kalıcı veya başka şekilde) ve API ilişkileri modelin dünyası olduğundan, temel HTTP istek girişi doğrulamasının denetleyicide gerçekleşmesine izin verin .
Özetleme.
1) Rotanızı doğrulayın (URL’den ayrıştırılır), denetleyici ve yöntem başka bir şey ilerlemeden önce mevcut olmalıdır. Bu, kesinlikle gerçek denetleyiciye ulaşmadan önce ön denetleyici aleminde (Router sınıfı) gerçekleşmelidir. Duh. :-)
2) Bir model birçok girdi verisi kaynağına sahip olabilir: bir HTTP isteği, bir veritabanı, bir dosya, bir API ve evet, bir ağ. Giriş onaylamanızın tümünü modele yerleştirecekseniz, programın işletme gereksinimlerinin HTTP istek girişi onaylama bölümünü göz önünde bulundurursunuz . Dava kapandı.
3) Yine de, eğer HTTP istek girişi iyi değilse, birçok nesneyi somutlaştırmak pahasına gider miyop ! Modeli ve tüm karmaşıklıklarını (evet, belki de API ve DB giriş / çıkış verileri için daha fazla onaylayıcı) başlatmadan önce doğrulayarak (HTTP istek girişi) ** ( istekle gelen ) iyi olup olmadığını öğrenebilirsiniz .
Aşağıdakileri test edin:
a) HTTP istek yöntemi (GET, POST, PUT, PATCH, DELETE ...)
b) Minimum HTML kontrolleri (yeterli var mı?).
c) Maksimum HTML kontrolleri (çok fazla var mı?).
d) Doğru HTML kontrolleri (doğru olanlara sahip misiniz?).
e) Giriş kodlaması (tipik olarak UTF-8? kodlamasıdır).
f) Maksimum giriş boyutu (çılgınca sınırların dışındaki girişlerden biri mi?).
Dizeleri ve dosyaları alabileceğinizi unutmayın, bu nedenle modelin başlatılmasını beklemek, sunucunuza yapılan isteklerde çok pahalıya mal olabilir.
Burada anlattıklarım denetleyiciden gelen isteğin amacına isabet ediyor . Niyet doğrulamasını reddetmek başvurunuzu daha savunmasız bırakır. Amaç sadece iyi (temel kurallarınla oynayarak) veya kötü (temel kuralların dışına çıkarak) olabilir.
Niyet , bir HTTP isteği için bir ya hep ya hiç bir teklif. Her şey geçer veya istek geçersizdir . Modele bir şey göndermenize gerek yok.
Bu temel HTTP isteği amacı , normal kullanıcı girişi hataları ve doğrulama ile ilgisi yoktur. Uygulamalarımda, bir HTTP isteğinin onurlandırmamı sağlamak için yukarıdaki beş şekilde geçerli olması gerekir. Bir de savunma derinlemesine eğer konuşma yolu, sunucu tarafında kullanıcı girişi doğrulama için asla herhangi bunlar beş şey başarısız olur.
Evet, bu, dosya girişinin bile, kullanıcıya kabul edilen maksimum dosya boyutunu doğrulama ve söyleme girişimlerinize uygun olması gerektiği anlamına gelir. Sadece HTML mi? JavaScript yok mu? Tamam, ancak kullanıcı çok büyük dosyaların yüklenmesinin sonuçlarından haberdar olmalı (temelde, tüm form verilerini kaybedecekleri ve sistemden atılacakları).
4) Bu, HTTP istek girişi verilerinin uygulamanın iş mantığının bir parçası olmadığı anlamına mı geliyor ? Hayır, bu sadece bilgisayarların sınırlı aygıtlar olduğu ve kaynakların akıllıca kullanılması gerektiği anlamına gelir. Kötü niyetli etkinlikleri daha sonra değil, daha erken durdurmak mantıklıdır. Daha sonra durdurmak için beklemek hesaplama kaynaklarında daha fazla ödeme yaparsınız.
5) HTTP istek girişi kötüyse, isteğin tamamı kötüdür . Ben böyle bakıyorum. İyi HTTP isteği girişinin tanımı, modelin iş gereksinimlerinden türetilmiştir, ancak bir miktar kaynak sınırlaması olması gerekir. Kötü bir isteğin onu öldürmeden ve "Ah, hey, boşver. Kötü istek." Demeden ne kadar süre önce yaşamasına izin vereceksin?
Karar basitçe kullanıcının makul bir giriş hatası yapmış olması değil, bir HTTP isteğinin kötü niyetli ilan edilmesi ve derhal durdurulması gereken sınırların dışında olması.
6) Yani, benim param için, HTTP isteği (YÖNTEM, URL / rota ve veri) ya TÜM iyidir ya da başka bir şey yapamaz. Sağlam bir model zaten kendisiyle ilgilenmek için onaylama görevlerine sahiptir, ancak iyi bir kaynak çobanı “Benim yolum ya da yüksek yol. Doğru gelin ya da hiç gelmeyin” der.
Bu senin programın. “Bunu yapmanın birden fazla yolu var.” Bazı yollar zamana ve paraya diğerlerinden daha pahalı. Daha sonra (modelde) HTTP istek verilerinin doğrulanması bir uygulamanın kullanım ömrü boyunca daha pahalıya mal olmalıdır (özellikle yukarı veya aşağı ölçeklendirme yapıyorsa).
Doğrulayıcılarınız modüler ise, denetleyicideki temel * HTTP istek girişinin ** doğrulanması bir sorun olmamalıdır. Doğrulayıcıların bazen özel onaylayıcılardan da oluştuğu, e-posta, telefon, form belirteçleri, captcha, ...) yalnızca stratejili bir Validator sınıfı kullanın.
Bazıları bunu tamamen yanlış yönlendiriyor gibi görüyor, ancak Dörtlü Çete Tasarım Desenleri: Yeniden Kullanılabilir Nesneye Yönelik Yazılım Öğeleri yazarken, HTTP başlangıç aşamasındaydı .
================================================== ========================
Şimdi, normal kullanıcı girişi doğrulaması ile ilgili olduğu için (HTTP isteği geçerli kabul edildikten sonra), kullanıcı düşünmeniz gereken mesajlaşırken görünümü güncelliyor! Bu tür bir kullanıcı girişi doğrulaması modelde yapılmalıdır.
Ön uçta JavaScript garantisi yoktur. Bu, uygulamanızın kullanıcı arayüzünün hata durumlarıyla senkronize edilmemesini garanti edemezsiniz. Gerçek aşamalı geliştirme, senkronize kullanım durumlarını da kapsayacaktır.
Eşzamanlı kullanım durumunun hesaba katılması, art arda kaybedilen bir sanattır, çünkü bazı insanlar zaman içinde ve uğraşmak istemezler; , arka uçtaki hata göstergeleri, hata mesajları (genellikle dizilerdeki durumu takip ederek).
Güncelleme : Şemada, View
referans olması gerektiğini söylüyorum Model
. Hayır veri geçmelidir View
gelen Model
gevşek bağlantı korumak için.