MVC mi Asp.net Web Form mu?

MVC mi Asp.net Web Form mu?

Asp.net MVC mi yoksa Asp.net Web Form mu? ikisi için de temel özelliklere göz atalım.

Web Form;

  • Öğrenmesi ve kullanması kolaydır,
  • Code behind tarafında (aspx.cs / aspx.vb) ilgili sayfa için tüm server kodları tek bir yerden yönetilebilir, bu açıdan kodlama süreci hızlıdır,
  • Bir sayfa içinde çoklu veri gösterilebilir. Biraz daha açıklamak gerekirse bir sayfada makale, yorumlar, oylamalar gibi farklı veriler, ascx kontrol kullanmadan, sayfanın pageload eventinde yönetilerek gösterilebilir,
  • Html ve server kodları farklı dosyalar (partial class) altındadır,
    public partial class _Default : System.Web.UI.Page
  • View State(durumyönetimi) kavramı mevcuttur. Sayfa içindeki verileri saklar ve postback sonrası veya tarayıcı geri tuşu ile bir sayfaya gelindiğinde, form içindeki verileri yeniden doldurur.
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" 
value="/wEPDwUJNzgzNDMwNTMzZGRKSpuLejDHB6P+RKbZyCauWTRAqA==" />
  • Root klasörü içindeki bir aspx sayfasına erişmek için url kısmına sayfa ismi yazılması yeterlidir. Herhangi bir routing kavramı bilmenize gerek yoktur.

Mvc;

  • Öğrenilmesi/alışılması web formlara göre biraz zordur,
  • Codebehind gibi bir yapı olmadığı için html içinde server kodları kullanılır. (Örneğin @model null kontrolleri)
  • Katmanlı mimari, MVC'de daha net görülmektedir. Model, View ve Controller ayrı katmanlardır, View ve Controller'ın ayrı katmanlarda olması, büyük çaplı projelerde html ve yazılım firmasının paralel olarak çalışabilmesine olanak sunar.
  • Her view tek model döndüğü için ekrana basılacak farklı veriler için birer partial view yazılması gerekir. Biraz daha açıklamak gerekirse bir sayfada makale, yorumlar, oylamalar gibi farklı verileri ekrana yansıtmak için ayrı ayrı controller ve partial view yazılması gerekmektedir. Yukarıda web form içinde verdiğim örnekte böyle bir ayrıma gerek duyulmadığı görülüyor.
  • Partial view'ler ayrı ayrı ele alındığında kullanışlıdır, tek sayfada kodlar toplanmadığı için yazılımcı kodlar arasında kaybolmaz, her bir controllerın tek bir iş yaptığını bilir fakat ilgili yazılımı yapan yazılımcı için yazılması bakımından zahmetlidir. PartialView'ı ekranda göstermek için de RenderAction kullanılması gerekmektedir aşağıdaki örnekteki gibi.
    @{ Html.RenderAction("GetArticleList", "Article"); }
  • Gerekli gereksiz her veriyi saklayan View State(durum yönetimi) olmadığı için request süreleri bakımından MVC daha hızlıdır.
    • View State dikkatli ve kontrollü olarak kullanılmadığında, ciddi performans sıkıntılarına sebep olur. Üstelik web formlarda aspx sayfaları içinde bulunan bir kontrol olduğu için hem post back hem de request süresini uzatır.
    • View State, sayfanın html çıktısında aşağıdaki gibi görülmektedir ve html'in okunuşunu zorlaştırmaktadır.
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" 
value="/wEPDwUJNzgzNDMwNTMzZGRKSpuLejDHB6P+RKbZyCauWTRAqA==" />
  • Saf bir html sunar ve arama motorları bunu daha çok sever. (Yeniden yazdığım MVC blogumda hız açısından farkı hissettim)
  • Postback kavramı yoktur, sayfa postback olduğunda bir takım kodlar çalışsın, postback olmadığında farklı kodlar çalışsın gibi durumlarla uğraşmak zorunda kalmazsınız.
    if (Page.IsPostBack)
    {
        // bla bla bla
    }
    else
    {
        // bla bla bla
    }
  • Herhangi bir sayfaya url kısmına sayfa ismi yazılarak gidilemez, bunun için route kavramını bilmeniz gerekmektedir.
  • Bundle ayarları mvc içinde mevcuttur (BundleConfig.cs), ekstra efor sarfetmenize gerek kalmaz, kısaca bundle;
    • Javascript veya css dosyalarını birleştirmek anlamına gelir, bu sayede onlarca css veya onlarca javascript dosyasını tek bir dosya haline getirip request sayısını azaltarak performansta kazanç sağlayabilirsiniz. BundleConfig.cs içinde örnek kullanım aşağıdaki gibidir.
    BundleTable.EnableOptimizations = true;

    // örnek script bundle
    bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                        "~/Scripts/jquery.unobtrusive*",
                        "~/Scripts/jquery.validate*"));
    
    // örnek style bundle
    bundles.Add(new StyleBundle("~/bundles/bootstrap-css").Include(
                        "~/Content/css/bootstrap.css",
                        "~/Content/css/bootstrap-theme.css"));

 

Aklıma geldiği kadarıyla Asp.net MVC ve Asp.net Web formların iyi/kötü yönlerini yazmaya çalıştım, soranlar olursa kendi projelerimde MVC'yi tercih ediyorum. Kendi deneyimlerimde gördüğüm sonuç şu: MVC, Web Formlara göre sayfa açılış konusunda çok daha daha hızlı, kodlama açısından daha okunur, proje yapısı bakımından daha anlaşılır. Karar veremiyorsanız Mvc ile başlamanızı öneririm.

Bir başka makalede görüşmek üzere :)

Facebook Yorumları

Blog Yorumları (5 Yorum)

avatar
  1. avatar avatar

    {{comment.Name}} dedi ki

Bu makaleyi faydalı buldunuz mu?

Bu içerikle ilgili görüşleriniz önemlidir. Ne düşündüğünüzü söyleyin.

Bu makale faydalı mıydı?

Üzgünüm faydalı değil.
Bildiriminiz gönderiliyor...
Geri bildiriminiz için teşekkürler!
Gönderme sırasında hata alındı!