Tasarım Kalıpları – Yeni Başlayanlar İçin MVC Kalıp Örnekleri
Yayınlanan: 2016-04-15MVC Kalıbının ne olduğunu ve ASP.NET MVC Çerçevesinin nasıl çalıştığını açıklar. Ayrıca ASP.NET MVC sayfa yaşam döngüsünü ve ASP.NET MVC özelliklerini sürüm açısından açıklar.
Örnekler, yeni başlayanların kolayca anlamalarına ve ASP.NET MVC'de yetkin olmalarına yardımcı olacak akıllıca adımlar sağladı.
Hepimiz birçok tasarım modelini bildiğimiz ve bunları uygulamalarımızda iş bileşenleri ve hizmetleri uygularken kullandığımız için, ancak yine de uygulamalarımızla ilgili sorunlar/zorluklarla karşılaşacağız. Ayrıca gün geçtikçe iş ihtiyaçları ve öncelikleri değişecektir. Bir takım sorunları, kusurları ve zorlukları yakından gözlemlersek, karşı karşıya olduğumuz kullanıcı arayüzü ve sunum katmanlarıdır. Bazı kusurlar iş mantığı ve iş kuralları ile ilgili olsa da, iş mantığını UI ve sunum katmanlarına sıkı bir şekilde entegre edebileceğimiz için bunları UI ve sunum katmanlarında düzeltmemiz gerekebilir. Bunun nedeni, uygulamalarımızda doğru tasarım modelini uygulamaya odaklanmamış olmamızdır. Adım adım ilerleyelim ve uygulamalarımızda sunum kalıbının nasıl uygulanacağını ve kullanılacağını anlayalım.
Sorun bildirimi:
- Halihazırda uygulamada farklı desenler kullanmakta ancak yine de uygulamayı sürdürmek zordur.
- İş mantığı katmanını test etmek için VS Test, NUnit, MUnit vb. Kullanılıyor, ancak sunum katmanında yer alan iş mantığı olarak uygulamada hala bazı kusurlar var.
- Uygulamada Sunum Katmanı, İş Mantığı Katmanı, Veri Erişim Katmanı kullanıldı, ancak bazen diğer modülleri veya diğer kullanım durumlarını kullanmak veya çağırmak için sunum katmanına yedek kod yazmanız gerekir.
- Entegre modüllerde bazı değişiklikler yaptığımızda entegrasyon hataları ekleniyor.
- Hata düzeltme ve geliştirmeler, sunum katmanı mantığını ve entegrasyon bağımlılıklarını analiz etmek için daha fazla zaman alıyor ve yeni kusurların açılmasına neden oluyor.
- ASP.NET MVC, kullanıcı arabiriminin oluşturulması karmaşık olduğundan seçilemez.
Sorunun Kök Nedeni:
Sunum katmanında,
- Bir sayfa veya form, uygulama etki alanı verilerini görüntüleyen denetimler içerir. Bir kullanıcı verileri değiştirebilir ve değişiklikleri gönderebilir. Sayfa, etki alanı verilerini alır, kullanıcı olaylarını işler, olaylara yanıt olarak sayfadaki diğer kontrolleri değiştirir ve değiştirilen etki alanı verilerini gönderir. Bu işlevleri yerine getiren kodun Web sayfasına dahil edilmesi Ayrıca, aynı davranışı gerektiren Web sayfaları arasında kod paylaşmak zordur. sınıf kompleksi, bakımı zor ve test edilmesi zor.
- UI Katmanı, UI Mantığı, Sunum Mantığı, İş Mantığı sıkı bir şekilde birleştirilmiştir.
- Sunum katmanı, modülleri veya kullanım durumlarını entegre etmekle ilgilenir.
Çözüm:
- UI Katmanını, UI Mantığını ve Sunum Mantığını ve İş Mantığını ayrı katmanlar olarak ayırmak için en iyi Sunum Katmanı Kalıbını seçerek kodun anlaşılmasını ve bakımını kolaylaştırın.
- Modüller veya herhangi bir kullanım senaryosu geliştirirken gevşek bağlantıyı etkinleştirin.
- Otomasyonla test edilebilen kodu en üst düzeye çıkarın. (Görüntülemeleri test etmek zordur.)
- Aynı davranışı gerektiren sayfalar arasında kod paylaşın.
- Görsel görüntüleme ve olay işleme davranışının sorumluluklarını sırasıyla view ve sunucu veya denetleyici veya ViewModel olarak adlandırılan farklı sınıflara ayırın.
Sunum Kalıbını kullanmanın faydaları:
- modülerlik
- Test odaklı yaklaşım – otomasyonla test edilebilecek kodu en üst düzeye çıkarın
- endişelerin ayrılması
- Sayfalar ve formlar arasında kod paylaşımı
- Bakımı kolay
Mevcut sunum katmanı kalıpları nelerdir?
MVC (Model Görünüm Denetleyicisi)
MVP (Model View Presenter) veya (Model Pasif View, Supervisor Controller)
MVVM (Model Görünümü Görünüm Modeli)
MVC'ye karşı MVP'ye karşı MVVM'ye karşı:
Model ve Görünüm, yukarıdaki 3 modelin hepsinde aynı şeyi mi temsil ediyor?
Evet
Denetleyici, Sunucu ve ViewModel amacı yukarıdaki 3 modelin hepsinde aynı mı?
Evet
Model, View with Controller, Presenter ve ViewModel iletişim ve akışı aynı mı?
Hayır , bu 3 kalıbın var olmasının nedeni budur.
Bu kalıplar PL (Sunum Katmanı), BLL (Business Logic Layer) ve DAL'nin (Veri Erişim Katmanı) yerini alıyor mu?
Hayır , bu modeller UI ve UI Logic'i Presentation Logic'ten ayırmak içindir ve gevşek bağlantıyı etkinleştirir.
En iyi Sunum Katmanı Modelini seçin:
MVP
- Bir veri bağlamı aracılığıyla bağlama mümkün değildir
- Karmaşık UI Tasarımı
- Windows Formları, ASP.NET Web Formları ve Sharepoint Uygulamaları için en iyisi
MVC
- Basit Kullanıcı Arayüzü ile ASP.NET için en iyisi
- Bağlantısı Kesilmiş Model (Diğer tüm katmanlardan ayrımı görüntüleyin)
Not: Burada MVC VM'ye (MVC3'ten MVC ViewModel) ve Bağımlılık Enjeksiyonlu ASP.NET MVVM'ye odaklanmıyorum.
OGVM
- Bir veri bağlamı aracılığıyla bağlama mümkündür
- Bağlı Model
- WPF ve Silverlight uygulamaları için en iyisi
ASP.NET Web Formları ve ASP.NET MVC:
ASP.NET Web Formları
- RAD
- Daha kolay geliştirme
- Zengin kontrol ekosistemi
- Windows Forms geliştirmeye yönelik geliştirme yaklaşımı olarak tanıdık
-
ViewState
yok ve geri gönderme desteği yok
ASP.NET MVC'si
- Temiz Endişe Ayrımı (SoC)
- Tam işaretleme kontrolü
- TDD'yi Etkinleştir (Test Odaklı Geliştirme)
- Etkinleştir ve kolayca REST yapar
- Daha kolay istemci tarafı entegrasyonu (Javascript)
- Çoklu Görünüm Motoru (bu gerçekten harika!)
- ViewState yok ve geri gönderme desteği yok
- Genişletilebilir ve WEB 2.0 Etkin
Model, Görünümler ve Denetleyici
- Model : Model nesneleri, uygulamanın veri etki alanı için mantığı uygulayan uygulamanın parçalarıdır. Genellikle, model nesneleri, model durumunu bir veritabanında alır ve depolar. Örneğin, bir Ürün nesnesi bir veritabanından bilgi alabilir, üzerinde çalışabilir ve ardından güncellenmiş bilgileri SQL Server'daki Ürünler tablosuna geri yazabilir.
- Görünümler : Görünümler, uygulamanın kullanıcı arabirimini (UI) görüntüleyen bileşenlerdir. Tipik olarak, bu kullanıcı arayüzü model verilerinden oluşturulur. Bir örnek, bir Ürünler nesnesinin mevcut durumuna göre metin kutularını, açılır listeleri ve onay kutularını görüntüleyen bir Ürünler tablosunun düzenleme görünümü olabilir.
- Denetleyici : Denetleyiciler, kullanıcı etkileşimini yöneten, modelle çalışan ve nihayetinde UI'yi görüntüleyen bir görünüm oluşturmak için bir görünüm seçen bileşenlerdir. Bir MVC uygulamasında, görünüm yalnızca bilgileri görüntüler; denetleyici, kullanıcı girdisini ve etkileşimini işler ve bunlara yanıt verir. Örneğin, denetleyici, sorgu dizesi değerlerini işler ve bu değerleri, değerleri kullanarak veritabanını sorgulayan modele iletir.
ASP.NET MVC Yüksek Düzey Sayfa Yaşam Döngüsü?
ASP.NET MVC Düşük Düzey Sayfa Yaşam Döngüsü?
MVC2.0 Yeni Özellikler
1. Şablonlu Yardımcılar:
Şablonlu Yardımcılar, düzenleme ve görüntüleme için HTML öğelerini veri türleriyle otomatik olarak ilişkilendirmemize yardımcı olur.
Örneğin, bir görünümde System.DateTime
türündeki veriler görüntülendiğinde, bir veri seçici UI öğesi otomatik olarak oluşturulabilir.
Bu, ASP.NET Dinamik Verilerinde alan şablonlarının nasıl çalıştığına benzer.
2. Alanlar:
Alanları kullanma Büyük bir Web uygulamasının karmaşıklığını yönetmek için büyük bir projeyi birden çok küçük bölüme ayırabiliriz.
Her bölüm ("alan") tipik olarak büyük bir Web sitesinin ayrı bir bölümünü temsil eder ve ilgili denetleyici ve görünüm kümelerini gruplamak için kullanılır.
Örneğin
[xhtml]
Alanlar
yönetici
Kontrolörler
Modeller
Görüntüleme
Iniala İddiaları
Kontrolörler
Modeller
Görüntüleme
[/xhtml]

3. Asenkron Kontrolörler için Destek:
ASP.NET MVC2, denetleyicilerin istekleri eşzamansız olarak işlemesine olanak tanır.
Bu, sık sık engelleme işlemlerini (ağ istekleri gibi) çağıran sunucuların bunun yerine engelleyici olmayan karşılıkları aramasına izin vererek performans kazanımlarına yol açabilir.
4. Eylem Yöntemi Parametrelerinde DefaultValueAttribute
desteği:
System.ComponentModel.DefaultValueAttribute
sınıfı, bir eylem yöntemine argüman parametresi için varsayılan bir değer sağlanmasına izin verir.
Örneğin, aşağıdaki varsayılan yolun tanımlandığını varsayalım:
[kod]
{kontrolör}/{eylem}/{id}
[/kod]
Ayrıca aşağıdaki denetleyici ve eylem yönteminin tanımlandığını varsayın:
[kod]
public class ArticleController
{
public ActionResult View(int id, [DefaultValue(1)]int sayfası)
{
}
}
[/kod]
Aşağıdaki istek URL'lerinden herhangi biri, önceki örnekte tanımlanan Görünüm eylemi yöntemini çağıracaktır.
- /Makale/Görünüm/123
- /Article/View/123?page=1 (Önceki istekle etkili bir şekilde aynı)
- /Makale/Görünüm/123?sayfa=2
5. Model Bağlayıcılar ile İkili Verileri bağlama desteği:
Html.Hidden
ikili değerleri base-64 ile kodlanmış dizeler olarak kodlayan iki yeni aşırı yüklemesi var:
[kod]
genel statik dize Gizli(bu HtmlHelper htmlHelper, dize adı, İkili değer);
public static string Hidden(bu HtmlHelper htmlHelper, string name, byte[] değeri);
[/kod]
6. DataAnnotations
Nitelikleri için Destek:
Giriş doğrulaması sağlamak için bir modele bağlandığımızda RangeAttribute
, RequiredAttribute
, StringLengthAttribute
ve RegexAttribute
doğrulama özniteliklerini ( System.ComponentModel.DataAnnotations
ad alanında tanımlanır) kullanma.
[kod]
System.ComponentModel.DataAnnotations kullanarak;
ad alanı MvcTmpHlprs
{
[MetadataType(typeof(ProductMD))]
genel kısmi sınıf Ürün
{
genel sınıf ProductMD
{
genel nesne SellStartDate { get; Ayarlamak; }
[UIHint("rbDate")]
genel nesne SellEndDate { get; Ayarlamak; }
[DataType(DataType.Date)]
public object DiscontinuedDate { get; Ayarlamak; }
[ScaffoldColumn(yanlış)]
genel nesne ModifiedDate { get; Ayarlamak; }
[ScaffoldColumn(yanlış)]
public object rowguid { get; Ayarlamak; }
[ScaffoldColumn(yanlış)]
genel nesne ThumbnailPhotoFileName { get; Ayarlamak; }
}
}
}
[/kod]
7. Model Doğrulayıcı Sağlayıcılar:
Model doğrulama sağlayıcı sınıfı, model için doğrulama mantığı sağlayan bir soyutlamayı temsil eder.
ASP.NET MVC, System.ComponentModel.DataAnnotations
ad alanında bulunan doğrulama özniteliklerine dayalı bir varsayılan sağlayıcı içerir.
8. İstemci Tarafı Doğrulama:
Model doğrulayıcı sağlayıcı sınıfı, doğrulama meta verilerini tarayıcıya, istemci tarafı doğrulama kitaplığı tarafından tüketilebilen JSON serileştirilmiş veriler biçiminde sunar.
ASP.NET MVC 2, daha önce belirtilen DataAnnotations
ad alanı doğrulama özniteliklerini destekleyen bir istemci doğrulama kitaplığı ve bağdaştırıcı içerir.
9. Yeni RequireHttpsAttribute
Eylem Filtresi:
ASP.NET MVC 2, eylem yöntemlerine ve denetleyicilere uygulanabilen yeni bir RequireHttpsAttribute
sınıfı içerir.
Varsayılan olarak filtre, SSL olmayan (HTTP) bir isteği SSL etkin (HTTPS) eşdeğerine yönlendirir.
10. HTTP Yöntemi Fiilini Geçersiz Kılmak:
REST mimari stilini kullanarak bir Web Sitesi oluşturduğumuzda, bir kaynak için hangi işlemin gerçekleştirileceğini belirlemek için HTTP fiilleri kullanılır.
REST, uygulamaların GET
, PUT
, POST
ve DELETE
dahil olmak üzere tüm yaygın HTTP fiillerini desteklemesini gerektirir.
ASP.NET MVC 2, eylem yöntemlerine uygulayabileceğimiz ve kompakt sözdizimi içeren yeni öznitelikler içerir.
Bu öznitelikler, ASP.NET MVC'nin HTTP fiiline dayalı bir eylem yöntemi seçmesini sağlar.
Örneğin, bir POST
isteği ilk eylem yöntemini çağıracak ve bir PUT
isteği ikinci eylem yöntemini çağıracaktır.
[kod]
[HttpPost]
public ActionResult Edit(int id)
[HttpPut]
public ActionResult Edit(int kimliği, Etiket etiketi)
[/kod]
ASP.NET MVC'nin önceki sürümlerinde, bu eylem yöntemleri, aşağıdaki Örnekte gösterildiği gibi daha ayrıntılı sözdizimi gerektiriyordu:
[kod]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id)
[AcceptVerbs(HttpVerbs.Put)]
public ActionResult Edit(int kimliği, Etiket etiketi)
[/kod]
Tarayıcılar yalnızca GET
ve POST
HTTP fiillerini desteklediğinden, farklı bir fiil gerektiren bir eyleme posta göndermek mümkün değildir. Bu nedenle, tüm RESTful
isteklerini yerel olarak desteklemek mümkün değildir.
Ancak, POST
işlemleri sırasında RESTful
isteklerini desteklemek için ASP.NET MVC 2, yeni bir HttpMethodOverride
HTML yardımcı yöntemi sunar.
Bu yöntem, formun herhangi bir HTTP yöntemini etkin bir şekilde öykünmesine neden olan gizli bir girdi öğesi oluşturur.
Örneğin, HttpMethodOverride
HTML yardımcı yöntemini kullanarak, bir form gönderiminin PUT
veya DELETE
isteği olarak görünmesini sağlayabiliriz.
HttpMethodOverride
davranışı aşağıdaki öznitelikleri etkiler:
-
HttpPostAttribute
-
HttpPutAttribute
-
HttpGetAttribute
-
HttpDeleteAttribute
-
AcceptVerbsAttribute
11. Şablonlu Yardımcılar için Yeni HiddenInputAttribute
Sınıfı:
Modeli bir düzenleyici şablonunda görüntülerken gizli bir girdi öğesinin oluşturulup oluşturulmayacağını belirtmek için yeni HiddenInputAttribute
özniteliğini bir model özelliğine uygulayabiliriz (Öznitelik, HiddenInput
öğesinin örtük bir UIHint
değerini ayarlar).
Özniteliğin DisplayValue
özelliği, değerin düzenleyici ve görüntüleme modlarında görüntülenip görüntülenmeyeceğini belirtmemize olanak tanır.
DisplayValue
false olarak ayarlandığında, normalde bir alanı çevreleyen HTML işaretlemesi bile görüntülenmez.
DisplayValue
için varsayılan değer doğrudur.
HiddenInputAttribute
özniteliğini aşağıdaki senaryolarda kullanabiliriz:
- Bir görünüm, kullanıcıların bir nesnenin kimliğini düzenlemesine izin verdiğinde ve değeri görüntülemenin yanı sıra, denetleyiciye geri iletilebilmesi için eski kimliği içeren gizli bir giriş öğesi sağlamak gerektiğinde.
- Bir görünüm, kullanıcıların zaman damgası özelliği gibi asla görüntülenmemesi gereken bir ikili özelliği düzenlemesine izin verdiğinde.
Bu durumda, değer ve çevresindeki HTML işaretlemesi (etiket ve değer gibi) görüntülenmez.
Örneğin:
[kod]
genel sınıf ProductViewModel
{
[HiddenInput] // [HiddenInput(DisplayValue=true)] ile eşdeğer
public int Id { get; Ayarlamak; }
public string İsim { get; Ayarlamak; }
[GizliGirdi(DisplayValue=yanlış)]
public byte[] Zaman Damgası { get; Ayarlamak; }
}
[/kod]
12. Html.ValidationSummary
Helper Yöntemi Model Düzeyinde Hatalar Görüntüleyebilir:
Html.ValidationSummary
yardımcı yöntemi, her zaman tüm doğrulama hatalarını görüntülemek yerine, yalnızca model düzeyindeki hataları görüntülemek için yeni bir seçeneğe sahiptir.
Bu, model düzeyindeki hataların doğrulama özetinde görüntülenmesini ve alana özgü hataların her alanın yanında görüntülenmesini sağlar.
13. Visual Studio'daki T4 Şablonları, .NET Framework'ün Hedef Sürümüne Özel Kod Oluşturur:
Uygulama tarafından kullanılan .NET Framework sürümünü belirten ASP.NET MVC T4 ana bilgisayarından T4 dosyaları için yeni bir özellik kullanılabilir.
Bu, T4 şablonlarının .NET Framework'ün bir sürümüne özgü kod ve işaretleme oluşturmasını sağlar.
Visual Studio 2008'de değer her zaman .NET 3.5'tir. Visual Studio 2010'da değer .NET 3.5 veya .NET4'tür.
14. API İyileştirmeleri:
Controller sınıfına korumalı bir sanal CreateActionInvoker
yöntemi eklendi.
Bu yöntem, Controller'ın ActionInvoker
özelliği tarafından çağrılır ve zaten bir çağrıcı ayarlanmamışsa, çağrıcının tembel olarak başlatılmasına izin verir.