02. ASP.NET Core MVC

ASP.Net Core MVC, MVC tasarım desenini kullanan web uygulamaları ve API’leri geliştirmek için zengin bir çatı sunar. Bu konuda, öncelikle MVC hakkında bilgi verilecek, ardından basit örneklerle ASP.Net Core MVC ortamı tanıtılacaktır. Bu bölümdeki kodlar Razor Pages Bölümünde olduğu gibi Visual Studio Code ortamında yazılacaktır.

MVC (Model – View – Controller) Nedir?

Öncelikle şunu belirtmek isterim ki MVC Microsoft’un önerdiği bir tasarım deseni değildir. MVC, Yazılım Mühendisliğinde önemli bir yere sahip olan yazılım mimari desenleri (architectural patterns)’in parçasıdır. Bu bölümde sadece MVC tasarım deseni hakkında bilgi verilecektir. Diğer tasarım desenleri hakkında bilgi almak için tıklayın.

1979 yılında Tygve Reeskaug tarafından oluşturulmuş ve yazılım gelişmede birçok projede kullanılmıştır. MVC tabanlı framework’leri Java, C++, Php, Python ve birçok köklü dilde bulabilirsiniz.

MVC tasarım deseni bir uygulamayı Models (Modeller), Views (Görünümler) ve Controllers (Denetleyiciler) olmak üzere üç ana katmana ayırır. Bu yazılım deseni sayesinde klasik yazılım geliştirme süreçleri de üçe ayrılmış olur ve katmanlar birbirinden bağımsız işlemler içerir. MVC tasarım desenleri, özellikle büyük çaplı projelerde projelerin yönetimini kolaylaştırmak için tercih edilir. MVC tabanlı projelerde birçok kişi perojenin detayına göre eş zamanlı olarak çalışabilir. Bu üç katmanı ayrı ayrı inceleyelim.

Models

Model, MVC projelerinde iş mantığının (businees logic) oluşturulduğu bölümdür. Veritabanına veri erişimi ve doğrulama (validation) işlemlerinden bu katman sorumludur. Bu katman her ne kadar tek katman gibi görülse de büyük projelerde birden fazla alt katmana ayrılabilir. View bölümüne veri taşımak için ViewModel tipi kullanılır. Controller, bu ViewModel nesnelerini oluşturur ve View bölümüne aktarılmasını sağlar.

Views

View, MVC projelerinde kullanıcı ara yüzlerin oluşturulduğu bölümdür. Web uygularında bu bölüm kullanıcılara oluşturulacak HTML dosyalarının hazırlanmasından görevlidir. Örneğin, ASP.Net Core MVC Razor kullanmamıza olanak sağlar. View kullanıcılardan gelen istekleri controller üzerinden alır. Ayrıca, Models ait bilgileri alır ve controller’dan gelen verilerle birleştirir. Sonuç olarak View kısmı kullanıcıya görsel veri üretmekle ilgilenen kısım olarak görebiliriz.

Controllers

Controller, süreçleri kontrol ede katmandır. Kontroller kulanıcının etkileşim kurduğu, model ile birlikte çalışan ve bir view render için seçen ana bir katman olarak görülebilir. View bir kullanıcıya görünüm bilgisi oluştururken, kullanıcı istekleri ve kullanıcıya cevap controller üzerinden gönderilir.

ASP.NET Core MVC

ASP.NET Core MVC, ASP.NET Core ile kullanım için optimize edilmiş hafif (lightweight) açık kaynak, test edilebilir bir framework’tür. Aslında .NET Framework için geliştirilen ASP.NET MVC’in bir adım gelişmiş hali olarak görülebilir. Dinamik web sayfalarını yapmanıza olanak sağlamasının yanı sıra Test Driven Development (TDD) destekler ve en son web standartlarını kullanır.

ASP.NET MVC : .NET Core’dan öncesi

.NET framework üzerine geliştirilmiştir. Şubat 2007 yılında, Microsoft’tan Scot tGuthrie (“ScottGu”) tarafından ABD’nin doğu yakasındaki bir konferansa giderken uçakta ASP.NET MVC’nin çekirdeğini / temelini tasarlamıştır. Bir kaç yüz satır koddan oluşan basit bir uygulamaydı fakat salondakileri heyecanlandıran ve potansiyeli yüksek bir teknoloji olduğunu o zamandan hissettirmiştir. Sonunda ASP.NET MVC 1.0,13 Mart 2009 yılında release oldu.

Asp.Net MVC, Microsoft’un Asp.Net teknolojisi üzerine MVC tasarımını giydirmesi ile oluşturmuştur.Bu yapı sayesinde büyük çaplı projelerde projenin yönetimi kolaylaşacak, yazılımın performansında artış görülebilecek,yazılan kodların yeniden kullanımı(reusablity) artacağından hem daha hızlı yazılım geliştirme yapılabilecek, hem de testleri daha kolaylaştırması amaçlanmıştır. ASP.Net MVC katkılarını:

  • Performans: ASP.NET MVC’de ASP.NET Web Forms (2002 yılında ilk versiyonu çıkan web geliştirme ortamı)’un en önemli özelliklerinden biri olan ViewState kavramı bulunmadığı için durum yönetimi yazılım geliştirici tarafından yapılmak durumundadır. ASP.NET Web Forms’ta durum yönetimleri otomatik olarak yapıldığından dolayı sayfaların performansı Asp.Net MVC sayfalarına göre daha düşüktür.
  • Reusability (Yeniden Kullanılabilirlik): ASP.NET Web Forms’ta sayfa içerisine yazılan kodlar (sunucu taraflı) o sayfaya yada kontrole özgü olmak durumundadır. ASP.NET MVC’de yazılan kodlar ise kontrollerden tamamen bağımsız olduğu için birden çok yerden aynı kod çağırılıp kullanılabilmektedir. Bu da kodların yeniden yazılmasının önüne geçer.
  • Test Driven Development: ASP.NET MVC’de yazılan kodlar kontrollere yada sayfaya özgü olmadığı (bağımsız yazıldığı) için kolaylıkla test edilebilir durumdadır. Bu sebeple ASP.NET MVC ile geliştirilen projeler Test Driven Development’a uygundur.
  • Yazılım Geliştirme Süresi Daha Kısa: Katmanlar birbirinden farklı olduğundan farklı yazılım geliştiriciler farklı katmanlarda aynı işlem için eş zamanlı olarak kodlama yapabilirler. Örneğin bir kişi yapılacak işlemin Modelini kodlarken biri Controllerı bir diğeri de View katmanını eş zamanlı olarak kodlayabilir. ASP.NET Web Forms’ta bir işlem için sadece bir kişinin kodlama yapması uygundur.
  • Kontrollerin Yönetimi İçin Client Side Development(İstemci Taraflı Geliştirme): Sayfa içerisine yerleştirilen HTML kontrollerinin yönetimi ve sunucuya istek gönderimi için ASP.NET MVC’de Javascript ve JQuery gibi istemci taraflı teknolojiler kullanılmaktadır.