Bu yazımda iki teknoloji arasındaki farklılıkları, avantajlarını ve dezavantajlarını sonuç olarak hangisini seçmemiz gerektiğini anlatacağım.
ASP.NET Web Forms üzerinde bulunan datalist, gridview gibi componentler kullanıldıklarında kapladıkları yer o kadar çoktur ki, normal durumda arkaplanda çalışan kodlarımızdan bile daha çoktur. Ayrıca postback ve view state kullanımıda büyük bir yüktür.
ASP.NET MVC kullanırken sunucu taraflı kontrollerin olmadığını göreceksiniz,yine postback esasına dayanan bir yapı da yok, ViewState yok. (ASP.NET WebForms 4.0 ile de bu alanda çok şeyler yapıldı, ViewState önemli derecede küçültülebiliyor hatta bazı durumlarda devre dışı bırakılabiliyorda) Araştırdığınızda bazı kaynaklarda sunucu taraflı kontrollerin kullanılabileceğini görebilirsiniz, şahsen yapmadım ama yapılmasının önünde bir engel yok,yalnız o durumda viewstate gibi durumlar nasıl hallediliyor bilmiyorum. Bence hiç sunucu taraflı kontrol kısmına girmeyin ASP.NET MVC kullanmanızın bir anlamı kalmaz.
Hali hazırda kullandığınız Web Forms'ların avantajları çok derin HTML ve Javascript bilgisi olmadan bile iş gören siteler oluşturulabilmesi. Sunucu taraflı kontroller zaten istemciye gönderilecek HTML çıktısını geliştirici yerine oluşturuyorlar, ya da bu çıktıya dönüştürülüyorlar demek daha doğru. Bu kontroller ihtiyaçları karşılama noktasında gayet iyiler, özellikle toolbox'un Data sekmesindekilerin yetenekleri.
Yine olay bazlı (event-driven) bir programlama modeli olduğundan daha önce bu modeli kullanan kişiler için büyük kolaylık sağlayacaktır. Önceleri Windows Forms ya da Office üzerinde programlama yapan kişiler WebForms kullanarak yabancılık çekmeden geliştirme yapabilirler.
Birde 3. parti kontroller var piyasada,görsellik ya da standart kontroller ile sağlanamayan özellikleri bu kontrolleri kullanarak edinmek mümkün.
ASP.NET MVC'nin avantajları ise bir kere üretilen HTML çıktısı üzerinde hakim olmanız. KB larca ViewState bilgisini oradan oraya sırtınızda yük gibi taşımak zorunda kalmıyorsunuz. Model View ve Controller adında 3 temel yapı sunulduğundan SoC(Seperation of Concerns - İlgilenilmesi gereken işlerin birbirinden ayrılması) sağlanmış oluyor. View sadece sayfada görüntülenecek kısımla ilgilenirken, Controller sayfadan kullanıcının yaptığı işlemlere göre bir çeşit iş katmanı gibi davranıp iş mantığını yürüttükten sonra gösterilmesi için yeni bir View gönderiyor istemciye. Model ise veri ve veritabanı işlemlerini çağrıştırıyor olsa da burada bir DAL(Veri Erişim Katmanı) kurulması mümkün. Yani iş katmanında verinin nasıl kullanılacağı ve veritabanına verinin ne şekilde kaydolunacağını da Model içerisinde inceleyebiliyoruz.Okuyunca biraz karışık geliyor ama düşününce yapılan işi planlama noktasında,mimari de diyebiliriz daha iyi bir sistem gibi duruyor.
Şu da var, ASP.NET WebForms ile geliştirme yaparken temel HTTP protokolünün nasıl çalıştığını bilmeye gerek yok, bir şekilde kullanıyorsunuz ama bunu framework sizi devreye sokmadan yapıyor, o yüzden MVC kullanmanın bu noktada da bir avantajı var diyebilirim. HTTP ve hergün kullandığımız Web nasıl çalışıyor sorusuna MVC daha iyi cevap veriyor.
Bu durumu bir örnekle açıklayalım: Asp.Net WebForms ile oluşturulmuş bir butona tıkladığımızda, normalde çalışan sistemden 10 kat daha fazla performans harcaması gerçekleşiyor. Bu çok büyük bir performans düşüklüğüne sebebiyet veriyor. Bu yüzden hızlı bir web sitesi yapmak hayal olarak kalıyor.
Ancak MVC'de bu gibi durumlar söz konusu değildir. Performansı yüksek ve oldukça hızlıdır.
Şimdi bu iki yapının avantaj ve dezavantajlarından bahsedelim.
ASP.NET WEB FORMS
Amaç Windows ortamında uygulama geliştiren geliştiricilerin zorluk çekmeden Web ortamına adapte olmalarını sağlamaktır. Kısaca geliştiricilerin çabuk bir şekilde uygulama geliştirmesine imkan tanımaktır.
Server kontrolleri (textbox,listbox vs.) viewstate dediğimiz yapıyı kullanarak otomatik olarak ayarlar.(state of view) Ancak bu durum büyük bir sorunuda beraberinde getirir.
Server kontrollerinin çok olması avantajlarından birisidir.WebForms'lar ortaya ilk çıktığı andan beri yüzlerce kişi ve şirket bu yapıya bileşen yazdı. Bileşenlerin bolluğu vardır ve bu bize daha kısa sürede kod yazma imkanı verir.
Ayrıca Asp.Net Web Forms ile ilgili çok sayıda kaynak vardır. İnternetten kolayca yararlanılabilir.
ASP.NET MVC
Uygulama Model, View ve Controller'a bölerek karmaşıklığı önler.
View üzerinde HTML kontrolü vardır. MVC FrameWork içerisindeki View sayfalarında standart HTML kullanılır ki bu da bize HTML üzerinde tam olarak kontrol sağlar.
Test Edilebilirdir. ASP.NET WebFormlar'da test imkanı çok kısıtlıdır. Test için harici sınıflar eklememiz gerekmektedir. Nedeni ASP.NET WebForm'un IIS ve yaşam döngüsü(life circle) olmadan bunu çok zor bir şekilde yapabileceğidir. MVC'de durum böyle değildir. MVC FrameWork oluşturulurken bu durum göz önüne alınmıştır ve buna karşı Test Driven Developer(Test Sürüşlü Geliştirme) gelmiştir.
URL Routing vardır. Microsoft MVC mimarisinde, Routing adı altında yeni bir düzenleme getirdi ve bunun büyük katkıları oldu. Daha kolay Seo'ya imkan verdi. Bu durumu ileride ele alacağım.
Sayfa döngüsü(life circle) yoktur. Hiçbir zaman overflow exception hatasına düşmez.