Asp.NET MVC (Model-View-Controller) Framework Nedir?

Son zamanlarda asp.net ile ilgilenen arkadaşlar asp.net mvc ilgili dökümanların çoğaldığını ortalıkta asp.net mvc diye bir şeyler dolanıp durduğunu görmüştür. Bu konuda fikir sahibi olmayanlar için kabaca ASP.NET MVC nin ne olduğunu, nasıl çalıştığını, yararlarını göstermeye çalışacağız. Çok ters gelebilir, fakat alıştıktan sonra inanın çok seveceksiniz.

Öncelikle şunu belirtelim : MVC’de postback, viewstate, codebehind, server kontrolleri (textbox, checkbox) ve bu kontollerin eventleri yoktur. Alışık olduğumuz bu yapı Asp.Net MVC’de farklı bir şekildedir. Peki neden bunlar yok, nasıl çalışıyor demeyin!? Bu yapı gayet güzel çalışıyor. Bunu neden farklı bir yapıda kullanma ihtiyacı duyuyum ki? Benzeri soruların cevabı ise;asp.net’teki webformsun bu yapısının bazı dezavantajları olduğu ve bu dezavantajların mvc’de olmamasıdır.Asp.Net MVC, WebForms’a alternatif olarak geliştirilmiştir.

MVC (Model View Controller) yapısı yıllardır web uygulamalarında kullanılmaktadır. Kullanım amacı ise internet sayfalarındaki hızı sağlamaktır. Daha önceden hazırlamış olduğunuz web uygulamalarında yapmış olduğumuz hataları hatırlamak için yeniden değinmeye çalışalım. Web sayfalarımızın kodlarını hazırlarken şu hataları sıkça tekrarladığımız gözlemlenmiştir. Veri tabanı, yönlendirme ve diğer bir çok işlemi son kullanıcı tarafından görülecek olan sayfasının arka plan kodlarına yazar ve işlemimizin bittiğini düşünerek web sayfamızı tamamlardık. Fakat zaman içerisinde web sitelerimizin kullanıcı sayısı arttıktan ve sitemizin içeriği genişledikten sonra sayfanın görüntülenmesi ile ilgili sorunlar yaşamaya başlayacağız. Eğer ki bütün işlemlerimizi görünen sayfamızın içerisinde yaptıysak bu tür sorunlar ile karşılaşmamız kaçınılmaz bir gerçektir. İşte MVC yapısı bu problemimizi ortadan kaldırıyor. Düzgün yazılmış bir MVC projesinde performas asp.net webforms’a göre çok çok daha iyidir.

Model, View ve Controller kavramlarına hangi amaçla kullanıldıklarını birer cümle ile açıklamaya çalışalım.

Model: Model genellikle veri tabanı işlemlerimizi yani işlerimizi( business ) yaptığımız yapıdır. Veri tabanımız üzerinde yapılabilecek sorgularımızı burada belirler ve Controller ’ı atamamızı sağlarız. Bu sayede veri tabanımıza dışarıdan daha kolay erişebilir ve çeşitli metotlarla daha kolay idare/müdahale edilebilir hale getirir.

View: Bu bölüm kullanıcıya cevap olarak döndürülen arayüzdeki statik ya da dinamik bileşenleri (html, jsp, css, aspx, …) barındırır. Diğer yardımcı yapılar yardımıyla programcılara da oldukça anlaşılır ve tamamıyla sayfa üzerinde kullanıcıya gösterilen form araçlarının bulunduğu kod parçası kalır.

Controller: Model yardımıyla oluşturduğumuz sorguların kullanıcı tarafından alınan veriler ile birleşip uyumlu bir biçimde çalışmasını sağlayan yapıdır. En genel tanımı Uygulamaya gelen sorgulara karşı nasıl cevap verilmesi gerektiği konusunda planı yapan, hareketi planlayan bölümüdür.

MVC yapısının katmanlarını ayrı ayrı tanımladık. MVC Framework ile ilgili ayrıntılı bilgilere değinmeyen önce MVC mimarisi üzerinde değinilmesi gereken bir nokta daha var. Hangi katmanın hangi katmana erişip erişemediğini bilmemizdir. Bunu neden bilmemiz gerektiğine gelirsek. Sebebi programlamayı yaparken daha rahat hareket edebilmemiz ve MVC mantığından sapmadan uygulamalarımızı geliştirebilmemiz içindir.

Peki, hangi katman hangi katmana erişebiliyor.

İlk olarak en etkin katmanı söyleyelim. Bu Controller ‘dır. Controller hem model ‘e hem de View ‘a erişebiliyor.

Model veri tabanı işlemlerimizi yapabildiğimiz katmandır.

View katmanı ise web uygulamalarımızın görünen tarafıdır. Bu katman da yalnızca Controller ‘a erişebilmektedir. Model katmanına erişebilmesi mümkün değildir. Zaten MVC yapısının mantığını düşündüğümüzde oluşma sebeplerinin başında View ile model ‘i birbirinden ayırmak olduğunu söyleyebiliriz.

Kısaca toparlamak gerekirse, Controller bütün katmanlara erişebiliyorken, View ise yalnızca Controller ‘a erişebilmektedir.

Genel olarak MVC yapısına değinmiş oluyoruz. Artık ASP.NET MVC Framework ‘e değinmeye başlayabiliriz.

İstemciden gelen talepler Controller içerisinde yer alan nesneler tarafından yakalanır. İlgili Controller gelen URL’i çözümleyerek kendi içerisindeki uygun action metodunu çağırır. Eğer ilgili action’da veri ile ilgili işlemler yapılacaksa Model kısmındaki nesnelere erişilir, getirilen veriler ilgili View nesnesine gönderilir. Eğer veri ile ilgili işlemler yoksa talep doğrudan yine View nesnesine gönderilebilir. View ise sayfa içeriğini render ederek HTML çıktıyı oluşturur ve çıktı istemciye gönderilir. Aslında genel işleyişe baktığımızda standart ASP.NET uygulamalarından çok farklı olduğu dikkatimizi çekiyor. MVC uygulamalarında talep doğrudan .aspx sayfalarına iletilmez, Controller içerisinde yer alan action metotları ilgili sayfaya gidilmesini ve üretilen HTML çıktının istemciye iletilmesini sağlar. Dolayısıyla burada istemci doğrudan sayfalarla iletişime geçmez, ancak yazılarn farklı URL’ler ile sayfalara gidebilir. Aşağıdaki şekilde istemciden gelen bir talebin sunucu tarafında nasıl ele alınacağı görülmektedir.

Asp.NET MVC Yapısı

ASP.NET MVC uygulamaları URL’in uygun formatta çözümlenmesiyle çalışmaktadır. Burada URL Routing adını verdiğimiz bir kavramla karşılaşıyoruz aslında. ASP.NET MVC’de standart olarak controller/action/id şeklindeki dizilimle URL’lere gelen talepler değerlendirilir. Bunun dışında farklı URL formatları da belirlenebilir, kendi özel URL formatlarınızı belirleyebilir, hatta URL içerisine yazılacak değerlere kısıtlamalar(constraints) dahi getirebilirsiniz. (URL Routing ile ilgili eğer fırsatım olursa ayrıca detaylı bir makale yazmayı planlıyorum) Products/Edit/3 şeklindeki bir URL’de Products controller’ı, Edit action’ı ve 3 ise id’yi simgeler. Aşağıda bazı URL formatları ve taleplerin izleyecekleri yollar listelenmiştir.

URLİzlenecek yol
site.com/Products/ProductsController içerisinde yer alan Index action metodu çağrılır. Eğer adreste bir action belirtilmemişse varsayılan action Index olur.
site.com/Products/ListProductsController içerisinde yer alan List action metodu çağrılır.
site.com/Products/Edit/3ProductsController içerisinde yer alan Edit action metodu çağrılır. Bu metoda 3 değeri id parametresi olarak gönderilir.
site.com/Categories/Details/4CategoriesController içerisinde yer alan Details action metodu çağrılır. Bu metoda 4 değeri parametre olarak gönderilir.
site.com/Categories/Edit/4CategoriesController içerisinde yer alan Edit action metodu çağrılır. Bu metoda 4 değeri parametre olarak gönderilir.

Aslında buraya kadar ASP.NET MVC’nin genel yapısından ve WebForm’lar üzerinde uygulama geliştiren programcılara yabancı gelebilecek özelliklerinden bahsettik. www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&displaylang=en adresinden ASP.NET MVC için gerekli dosyayı bilgisayarınıza yükleyip kurabilirsiniz. Kurulum için .NET Framework 3.5 SP1 ve Visual Studio 2008 SP1′in bilgisayarınızda önceden kurulu olması gerekir. ASP.NET versiyonlamasıyla ilgili olarakta önemli bir noktayı belirtmekte fayda var; ASP.NET MVC Framework ASP.NET 4.0 ile mimariyle bütünleşik hale geliyor.Visual Studio 2010 ‘da MVC 2 entegre olarak geliyor. Ayrıca MVC 3 tam sürümüyle çıktında MVC 3 ü yüklediğimiz bilgisayarlarda uygulamayı MVC 2 ya da MVC 3 olarak seçim yapabileceğiz.

Mehmet YAYLACI
YORUMLAR (2)
  1. ünsal eroğlu
    ünsal eroğlu - Cevapla

    28 Ağustos 2014 - 20:50

    Merhaba Senaryomuz web form fileupload Kullanılarak (mvc tabanlı olmak şartı ile)excel deki yaklaşık 5000 satır veri olacak şekilde database insert işlemi olacak Windows form uygulamasında ise aktarılan veri devexpress grid kullanılarak gösterilecek ve gride sorgulama imkanı olacak veri aktarımda ve sorgusunda mutlaka stored procedure kullanılmalı data katmanın da linq veya entity framework kullanılmalı. nereden başlayıp nasıl devam etmeliyim.teşekkürler

    • Mehmet YAYLACI
      Mehmet YAYLACI - Cevapla

      29 Ağustos 2014 - 00:08

      Sorunuzun cevabı öyle bir yoruma felan sığmaz galiba. Ama yardımcı olmak açısından ilk önce ASP.NET MVC File Upload makalesini okuyarak başlayabilirsiniz.

YORUM FORMU