Matematiksel Modelleme Mühendislikte
Mvc'daki Viewmodels'in Rolü Data Binding ve Sunum Mantık
Table of Contents
Model-View-Controller (MVC) mimari desen uzun zamandır yapılandırılmış web uygulaması geliştirmenin temel taşı olmuştur.Bir uygulamanın üç birbirine bağlı bileşene bölünmesi - Model (data ve iş mantığı), View (kullanış) ve sunum mantığı, kontrollere veya görüşlere bağlı olarak, dağınıklığa, sert bakımlara ve genişletilmeye eğilimlidir.Bu açık ayrımcı modelde bile, geliştiriciler genellikle alan modelden gelen ham verileri nadiren görüntülenen ve sunum mantığına uygun olarak uygularlar.
Bir View Modeli Nedir?
Bir ViewModel, özellikle iş varlıkları ve kuralları temsil eden bir özel sınıfdır (örneğin, algD:0) Uygulama (kömül veya veri erişim katmanı) ve görüntü, görüntünün sorunsuz bir şekilde tüketilmesi için kullanılan bir form haline gelir.Bu görünüm modelinin aksine, iş varlıklarını ve kuralları (örneğin, algT:0) nesne ile işlem yapan bir uygulama:0,16.DüzDüzüğün nesnesi:2,145-T:3) ve görüntülenmesi gereken bir görünüme sahiptir.
Tipik bir kullanıcı profili sayfasına bakınız. Domain modeli ayrı olabilir.DÜcretsiz ve görüntünün her iki varlığın yapısını anlaması ve mantık yürütmesi gerekir - tek bir İLDİT:11'e ve bir insan hazır formatta devlet.
Model vs. Domain Model vs. DTO
Bir görüntü modeli diğer benzer desenlerden ayırt etmek önemlidir. Bir Data Transfer Object (DTO) genellikle katmanların (örneğin, bir hizmetten bir kontrole) ve genellikle davranış eksikliğini ayırt etmek için kullanılır. A ViewModel, diğer taraftan, kullanıcınızı iş katmanınıza ve güvenlik ve bakım sorunlarına yönlendirmek için doğrudan görüntülemeniz gerekir.
Modeller Data Binding Nasıl Basitleştiriyor
Veri bağlayıcısı, UI elementlerini veri kaynaklarına bağlayan mekanizmadır, otomatik olarak doğrulayıcı değerlerdir.In server-side MVC frameworks like ASP.NET MVC, Spring MVC, or Laravel, bağlayıcı veri tipik olarak form teslimleri sırasında oluşur: çerçeve okuma parametreleri ve haritalar bir model nesneye dönüşür.In server-side MVC Frameworks like ASP.NET MVC frameworkping becomes simple and safe.
Veri bağlayıcısı için bir View Modeli kullanmak çeşitli avantajları sunar:
- [FONT:0)Öylegenin haritalanması:[Dönetici:0)Öylegenin bir kayıt formuna göre, aşağıdaki tür bir görüntü oluşturabilirsiniz.[FONTD:0).Testler bir beyaz liste olarak hareket eder.
- [FONT:0)Strongly tipte geçerlilik özellikleri:) ViewModels, geçerlilik kurallarını (örneğin, 03: 14) yerine getirmenize izin verir.
- [[Dönetici:0)Redüklenen bağlayıcı hataları:[Dönetici:[Dönetici:0)Redüktör hataları ile ilgili tahminlerden kaçınır:[Döneticileri kontrol eden ve kontrolcülerdeki kazanım kodunu azaltır.
Örnek: Kullanıcı Kayıt Formu
Bir ViewModel olmadan, bir denetleyici bir kayıt isteğine yalnızca [[DörtÜDÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜye Olmayanlar İçin Kayıt Talebini Bağırsayabilirler.) ve sonra, Kontrollülüğün içinde alan modelini güvenli bir şekilde bağlayabilir ve sonra da işletme mantığının içinde alan modeli ile kontrol eder.
Müşterinin iki yönlü bağlayıcıyı kullanan çerçeveler (örneğin, Angular veya Vue.js), ViewModels, bileşenlerin görüntü ve değiştireceği verilerin şekli ile benzer bir rol hizmet eder.The ViewModel, hesaplanmış özellikleri, değişim izleme ve etkinlik eller, bunların hepsi enkaplar ve test edilebilir.
Sunum Mantıkında Modellerin Rolü
Sunum mantığı, görüntünün verileriyle yapılması gereken her şeyi kapsar: Biçimlendirme tarihleri, para dönüştürmek, çağrıları hesaplamak, kullanıcı izinlerine dayanarak hangi bölümleri karar vermek ve UI durumunu yönetmek (örneğin, “Loading” vs., bu mantık genellikle görüntülenebilir bir sınıfta sona erer.
Örneğin, bir sipariş ayrıntıları görüşü görüntülemek gerekebilir:
- Canlı bir formatta tarih ("Mart 15, 2025)
- Müşteri tam adı (ilk ve sondan itibaren)
- Alt toplam (kahka birim fiyat) ile her satır öğe
- Toplam vergi ve nakliye ile sipariş
- Sipariş iptal için uygun olup olmadığı (vardır ve elaps zamanında)
Tüm bu dönüşümler ViewModel'e aittir.Bu görüş, hizmeti katmanından alan modeli yeniden kullanarak, haritalama ve görüntüye geçmek için görüntü oluşturabilir.
Birden çok kaynaktan gelen veriyi takip etmek
Bir başka ortak ihtiyaç, birden fazla alan modellerinden bir sayfada görüntüleniyor. Bir pano, kullanıcı profili verilerini, son siparişleri ve bildirimleri bir araya getirebilir. A ViewModel, bu parçaları tek bir nesnede tutabilir, bir eşleme sayfası oluşturmak için kolay hale getirebilir. Kontrol aramaları ayrı hizmetler ve görünümleri bir araya getirir.
ViewModels kullanarak Faydaları
ViewModel modelini sürekli olarak uygulama avantajları önemli ve doğrudan etki kodu kalitesi, kullanılabilirlik ve takım verimliliğini etkiler.
Endişeli Ayrılık
Modeller, alan katmanı (iş kuralları) ile sunum katmanı arasında temiz bir sınır uygularlar. UI'ye değişiklikler (örneğin, yeni bir alan oluşturmak gibi) yalnızca ViewModel'de ve görüşte değil, alan modelinde değil (bir varlık üzerinde yeni bir mülk gibi) görüntülenen değişiklikler, görünüm haritasını güncellemediğiniz sürece.This partition regresyon riskini azaltır.
UI Mantıkının İyileştirilmesi
Görüntüleme mantığı, bir tarayıcı veya HTML oluşturmadan birim test etmek için çok zor.Bu, UI framework'ten izolasyonda formatlama, aggregasyon ve devlet yönetimi test edebilirsiniz.You can write Unit tests that verifyFLT:28ME orENFLT:29 without load a browser or form HTML.This lead to more reliable code.
Azaltılmış Kod Duplication
Aynı veriler birden fazla görüşte görüntülenmelidir (örneğin, bir listedeki ve ayrıntılı bir sayfada bir ürün kartı), her iki görüş kullanımı için ortak bir görünüm modeli oluşturabilirsiniz. Sunum mantığı her görüşe kopyalanmak yerine bir yerde.
Daha İyi Sunum Organizasyonu -Specific Data
Modeller UI durumunu “edit modu”, “düşük hataları” veya “sayfa numarası” gibi görüntülemek için kullanın.Bu, navigasyona odaklanmış görüş durumunu tutar.Bu destek modeli bağlayıcı olan çerçevelerle, aynı zamanda ViewModel durumunu taleplerle serileştirebilirsiniz, çok adımlı büyücüler gibi zengin etkileşimleri de serileştirebilirsiniz.
Ortak Pitfalls ve En İyi Uygulamaları
Yararlıları ile bile, ViewModel modeli yanlış olabilir. İşte yaygın hatalar ve onlardan nasıl kaçınılması.
Overusing ViewModels for Every View
Her görüş özel bir görünüm modeline ihtiyaç duymaz. Basit ekran için sadece tek bir alan nesnesi ile eşleşen sayfalar için, doğrudan bir DTO'ya (veya sadece bir tabaka kullanıyorsanız alan modeli) kabul edilebilir.
Anemic ViewModels
Bir görüntü modeli, hiçbir şey değil, hiçbir davranışla kamu mülklerinin bir çantasını başka yerlerde sızdıran mantıka yol açabilir.Profsulate sunum mantığını (örneğin, 03.30) içeren yardım yöntemleri veya hesaplanan özellikleri içerir.
Naming Conventions
Name ViewModels açıkça amaçlarına işaret ediyor.Sessiz bir klasörde (örneğin, www.g., 03:35) veya daha spesifik isimler, proje temiz tutmak için kullanılır.
Domain ve ViewModel arasındaki harita
Manual haritalama (malzeme tarafından uygun) oldukça tartışmalı ve hataya dayalıdır. AutoMapper for .NET, MapStruct for Java, or helper functions in PHP to automate the mapping. ancak, dikkatli olun, bazen ViewModel yapısı alandan önemli ölçüde farklıdır ve manuel haritalama net bir şekilde sunar. Automate the simple mappings, but don't write open logic for complex conversions.
Uygulamayı Uygulamayı Uygulamayı Uygulamayı Uygulamayı Uygulayın
Prensipler evrenseldir, ancak uygulamalar biraz farklıdır. Üç popüler MVC çerçevelerine bakalım.
ASP.NET MVC / Core
ASP.NET MVC'de, ViewModels, doğrudan görüntü özelliklerine yerleştirilen C# sınıflarıdır.Testler onları görüntüleyici veriler kullanarak eylem yöntemi parametreleri ile alır; örneğin Razor görüşleri görüntülenmesi için güçlü bir şekilde yazılır ([Döneticileri ► · 8,00 $ · 8,00).
public class UserProfileViewModel
{
public int Id { get; set; }
[Display(Name = "Full Name")]
public string FullName { get; set; }
public string Email { get; set; }
[DataType(DataType.Date)]
public DateTime JoinedDate { get; set; }
}
ASP.NET Core'daki ViewModels hakkında daha fazla bilgi edinin:0)Microsoft'un resmi belgeleri).
Bahar MVC (Java)
Spring MVC, ViewModels genellikle "eski nesneler" veya "komün nesneler" olarak adlandırılırlar.Onlar JSP veya Thymeleaf şablonlarında geçerli olan Java POJOs'u da kullanabilirsiniz. Spring ayrıca özel mülk editörleri için doğrulayıcı kullanımları desteklemektedir.
Laravel (PHP)
Laravel, modellerini form talepleri (validation) ve kaynak sınıfları (API yanıtları) ile genişletmiş ve yöntemlerine erişmek için özel sınıflar veya sadece bir diziyi kullanabilirsiniz. ancak, özel ViewModel sınıfları (örneğin, 03.03.) geçerli olan form güvenliği ve test edilebilirliği geliştirir. Laravel'nin 03.Aday. SeeFLT:0Laravel'nın form talebi[D)
Gelişmiş ViewModel Desenleri
Uygulamalar büyüdükçe, daha sofistike ViewModel yapılarına ihtiyacınız olabilir.
Nested ViewModels
Bir görüş bir eşya listesi içeriyorsa, bir ebeveyn ViewModeli çocuk ViewModels koleksiyonu tutuyor. Örneğin, aurFLT:48) ve [[Delt:50) içerebilir.Her çocuk ViewModel kendi sunum mantığına sahiptir.
Model Inheritance ve Kompozisyon
Birden fazla görüş ortak özellikleri paylaşırsa (örneğin, kullanıcı bilgileri ve menü öğeleri ile “sayfa başlığı” bölümü), bir temel ViewModel sınıfı oluşturabilir ve bunu genişletebilirsiniz. Alternatif olarak, kompozisyonu kullanın: bir mülk kompozisyonu genellikle daha esnektir ve derin miras hiyerarşilerinden kaçınır.
Modeller Asynchronous Firstization ile
Bazı ViewModels, birsen aramalarından (örneğin, dış API'ler) verileri gerektirir.Törüntüyü mükemmel bir şekilde inşa eden bir fabrika yöntemi veya özel bir hizmet oluşturabilirsiniz. kontrolörü bekliyor ve sonucu görüşe geçer.Bu, kontrol edilebilirliği sağlarken test edilebilir ve test edilebilir bir şekilde test edebilirsiniz.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Modeller MVC geliştirmesinde güçlü ama sıklıkla kullanılan bir araçtır. Modeller ve görüşler arasında özelleştirilmiş bir aracı olarak hizmet ederek, veri bağlayıcılığı, sunum mantığını basitleştirir ve arayüze özel değişikliklerden alan modeller uygularlar ve test edilebilirliği azaltırlar ve uygulama geliştikçe kod tabanını daha fazla koruyabilirsiniz. Küçük bir iç araç veya büyük bir işletme uygulaması inşa etmek, sunum mantığını hazırlamak ve büyük bir görünüm modellemek için zaman yatırım yapmak, modellemek için zaman harcamak.
ViewModels'i uygularken, onları henüz ifade edici, geçerlilik özelliklerini gizlemek ve haritalama araçları kullanmak akıllıca bir şekilde.Her görüşe sahip olmanın tuzaklarından kaçının bir manzaraya bağlı olarak -Uygulama modelinin disiplini[Döneticileri, arayüzünüzün gerçek ihtiyaçlarını keskinleştirip daha temiz, daha sağlam MVC uygulamalarını ifade etmek için.[MVC)