Asp.Net MVC Framework - Anlamak

Daha önceki MVC Framework yazılarımızda bu yapının ne iÅŸe yaradığına ne gibi uygulamalar geliÅŸtirebileceÄŸimize göz atmıştık. Bu yazımızda ise biraz daha detaylı olarak MVC Framework ‘ü inceliyor olacağız.

MVC Framework mimari patterni üç ana katmandan oluÅŸmaktadır. Bunlar; Model, View ve Controller ‘dır. MVC ile uygulama geliÅŸtirebilmemiz için gerekli teknik gerekliliÄŸi System.Web isim alanı türetilerek oluÅŸturulmuÅŸ olan System.Web.MVC isim alanı geliÅŸtirilmiÅŸtir.

MVC Framework design pattern ‘ı web uygulama geliÅŸtiricilerin alışık olduÄŸu yapıda hazırlanmıştır. Benzer sayfalar sürekli tekrarlanacaksa ya da bir sayfa üzerinde veri tabanından gelen veriler olacaksa sayfa gösterimlerinde tek tek sayfa oluÅŸturmak yerine QueryString yapısı kullanılarak oluÅŸturulan tek sayfa üzerinden binlerce sayfa oluÅŸturulmuÅŸ gibi kullanılmasına olanak tanıyor. Bu yapı sayesinde artık ufak ölçekli hazırlanan web sayfalarında da bir mimari tasarım kullanılmış olacak. GeliÅŸtirilen bu yapının bizlere katkısını bir örnekle açıklamak gerekirse sanırım daha açık olacaktır.

Ufak ölçekli bir kurumun ya da kiÅŸisel web sayfası hazırlayan geliÅŸtiriciyi düşünelim. Temel site ÅŸablonları vardır. Ana sayfa, iletiÅŸim, hakkında ve bir kaç tane daha sayfa... Alt sayfalar istendiÄŸi durumda ise tek tek sayfa oluÅŸturmaya baÅŸlanır ve statik bir site hazırlanmış olur. Zaman içerisinde bu siteye yeni eklentiler yapılmak istendiÄŸinde ise tekrar geliÅŸtiriciye iÅŸ düşer, bir kaç sayfa daha ekler ve iÅŸini tamamlar. Fakat bu durum veya biraz daha iyi durumda bulunan sistemler zaman içerisinde baÅŸka kiÅŸiler tarafından tekrardan geliÅŸtirilmek istendiÄŸinde geliÅŸtirilebilirliÄŸinin olmadığını ve yeniden hazırlanması gerektiÄŸi gerçeÄŸini ortaya çıkartır. Bu gerçek karşısında yapılması gereken katmansal mimari yapı ile tekrardan uygulama geliÅŸtirilir ve herhangi biri tarafından yenilenebilir ve belirtilen kriterler doÄŸrultusunda büyütülebilir bir web sayfası hazırlanır. Fakat bu tür web sayfasının maliyeti ufak kurumları maalesef zorlamaktadır. Bu sebepten ötürüdür ki yukarıda bahsettiÄŸimiz çözüme yönelerek ufak maliyetlere iÅŸlerini görecek ürünü kullanmak isterler. Ä°ÅŸte MVC Framework bu noktada ufak maliyetlerle mimari yapıyı kullanarak uygulama geliÅŸtirmemizi saÄŸlayan bir ürün olarak karşımıza çıkıyor. MVC ‘nin mimarisinin katmanları olan Model, Controller ve View ‘ı açıklayalım.

Model: Uygulamaya logic olarak eklenecek veri katmanını oluşturduğumuz bölümdür. Veri tabanı işlemlerimiz için tablolarımızı ve saklı yordamlarımızı (store procedure) Ado.Net Entity model veya LinQ model yardımı ile kullanabileceğimiz katman olarak tanımlayabiliriz.

View: Kullanıcı kontrollerinin, bileşenlerin gösterildiği ve son kullanıcının gördüğü katmandır. Genel olarak model katman üzerinde yer alan tablo kolonlarına göre oluşturulur. Genel yapısı dışında Asp.Net uygulamalarında da yapabildiğimiz gibi tasarımsal öğeleri ekleyerek (css, resim, animasyonlar (Flash, Silverlight, v.b. ) gibi) daha zengin web uygulamaları da oluşturabilmemiz mümkündür.

Controller: View katman üzerinde yapılan işlemler sonucunda sayfanın hangi sayfaya yönleneceğine, ya da veri tabanı üzerinde işlem mi yapacağına ilişkin işlemlerin tutulduğu katmandır.

MVC Framework kullanılarak gerçekleştirilmiş uygulamalar kompleks ( kullanıcı katmanı, iş katmanı ve veri katmanı ) yapıda oluşurlar. Bu yapı ile geliştirilen uygulamalar, en basit olarak düşünülen web sayfalarının dahi bir katmansal yapı dahilinde geliştirilmesine olanak tanıyacaktır.

Asp.Net MVC Framework ‘e alternatif uygulama nasıl gerçekleÅŸtirilir diye düşünürsek, bir Asp.Net web form uygulaması oluÅŸturduktan sonra yukarıda açıkladığımız MVC patternine göre bir uygulama geliÅŸtirmemiz gerekecektir. Yazılım geliÅŸtirilmesinde uygulamanın iyiliÄŸinin dışında zaman maliyetini de göze alınırsa, web formlar ve MVC patternini kullanarak geliÅŸtirdiÄŸimiz uygulamanın aynısı daha kısa bir süre içerisinde geliÅŸtirebilmemize olanak tanıyan bir teknolojiyi tercih etmek çok daha mantıklı olacaktır. Bu sebepten ötürüdür ki web uygulamalarımızda MVC Framework ‘ü tercih etmemiz hem zaman hem de beyin gücü açısından bizlerin yararına olacaktır.

ASP.Net MVC Framework ile Web Uygulaması oluÅŸturuyoruz…

Ä°lk uygulamamızı oluÅŸturmadan önce ilk olarak web sayfalarımızda ne tür yapıları kullanabileceÄŸimize bir deÄŸinelim. MVC Framework kullanılarak geliÅŸtirilmiÅŸ olan uygulamalarda Asp.Net web sayfası ( *.aspx ), master page ( *.master ) ve user control ( *.ascx ) ‘i web projemize ekleyebiliriz. Belirttiklerimizin dışında veri tabanı tablolarını ve kolonlarını nesne olarak kullabilmemiz için özelliklerini (get ve set) tanımlayabiliriz.

MVC Framework ile uygulama geliÅŸtirebilmemiz için ilk olarak Visual Studio ‘ya eklentisinin kurulu olması gerekmektedir. Kullanmak istediÄŸimiz model katmanına baÄŸlı olarak ister LinQ ile hazırlanmış istersek de Ado.Net Entity Framework ‘ün olması gerekmektedir.

Bütün gereksinimlerimizin hazır olduğunu düşünerek MVC Framework projesi geliştirmeye başlayabiliriz. İlk olarak yeni bir MVC projesi oluşturmamız gerekmektedir. Bu işlem için new-> Project -> ASP.NET MVC Web Application adımlarını izleyerek projemizi oluşturuyoruz.



Oluşturduktan sonra test projesi de oluşturayım mı diye bir seçenek sunuyor. Bunu kabul ederek projemizi oluşturuyoruz.



Solution Explorer ‘a hangi dosyalar geldiÄŸine göz atalım.



Projemizde oluşmuş olan klasörlerin ne işe yaradığını kısaca açıklamak gerekirse,

App_Data: Web sayfamızda kullanacak olduğumuz fiziksel veri tabanı dosyasını eklediğimiz bölümdür. SQL Express ile oluşturulan *.mdf uzantılı dosyalar bu türlerden biridir.

Content: web sayfamızda kullanacak olduğumuz style sheet, resim v.b. dosyaları tuttuğumuz klasör.

Models: Veri tabanını logic olarak kullanabilmemiz için oluşturduğumuz Entity ya da linq modeli tuttuğumuz bölüm.

Script: JavaScript, JQuery ve diğer script türlerini tuttuğumuz ve proje içerisinde referans olarak göstereceğimiz klasördür.

Views: Son kullanıcının göreceği sayfaların bulunduğu klasördür. Paylaşım dosyalarını yayınlayacaksak shared klasörünün içerisine, kullanıcı girişi v.b. işlemler yapmak istiyorsak account klasörünün içerisine. Ana ekrana ilişkin işlemler yapmak istiyorsak ta Home klasörünün içerisine ekleyebilmemiz mümkündür. Ayrıca oluşturulan web sayfalarının kendimiz oluşturabilmekle birlikte model katmanda oluşturduğumuz login model ile Controller üzerinden yaptığımız işlemler doğrultusundan otomatik olarak model a bağlı olarak oluşturabilmemiz mümkündür.

Controller: Son kullanıcılardan gelen istekleri alarak gerekli katmanlara gönderir ve tekrar son kullanıcıların görmesi için view katmanına gönderir. HomeController için düşünmek gerekirse. Ana sayfada ne tür yazılar ya da veri tabanından verilerin çekilip basıl gösterileceÄŸi home Controller ‘ da belirlenir. Hangi istek doÄŸrultusunda oluÅŸturmuÅŸ olduÄŸumuz modele gideceÄŸine ve hangi iÅŸlemi yapacağına karar verir.

HomeController kullanılarak oluşturmuş olduğumuz web sayfalarının adresi şu biçimde olmaktadır. [View]\[ControllerName]\[Action].aspx Controller üzerine bu kadar değindikten sonra yine bu konu üzerinde devam ediyor olacağız.

Controlleri Anlamak

MVC Framework kullanılmayan uygulamalarda kullanıcılardan gelen istekler doğrultusunda business katmana yönlendirme işlemini yapan bir katman durumundaydı. MVC kullanılan uygulamalarda ise kullanıcının ekranda yaptığı istekler doğrultusunda bir action olşuturulur ve işlem ona göre yapılır.

Controller içerisine, sayfalar arası yönlendirme işlemlerini, model içerisine oluşturmuş olduğumuz db logic üzerinde yapılacak işlemlerin oluşturulduğu, view katmanda oluşturulan sayfaların miraslandığı katman olarakta kabul edebiliriz.

Not: MVC Framework ‘te oluÅŸturulan bütün Controllerlar IController arayüzünden türetilmiÅŸtir. Yani Controller sınıflarının base sınıfı IControllerdır.

Controller klasörümüzün içerisinde yer alan HomeController.cs sınıfımıza göz atarsak,

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
       ViewData["Message"] = "Welcome to ASP.NET MVC!";

       return View();
    }

    public ActionResult About()
    {
        return View();
     }
}

Yukarıdaki kod bloğunun otomatik olarak oluşturulduğunuz görürüz. HomeController sınıfı Controllerdan türetilmiş. Controller da IControllerdan türetilmektedir.

HandlerError attribute ‘ü view katmandan gelen action ‘da sorun çıkması durumunda da metodun iÅŸlemesine olanak tanımaktadır.

MVC Controller ‘da kullanabileceÄŸimiz Public Metodlara bir göz atalım.

ViewResult: HTML ve Markup sunar (Represent).
EmptyResult: Sunumu sonlandırır.
RedirectResult: Sunulan linki yeni bir adrese yönlendirmeye yarar
JsonResult: Java Script Object ‘leri Ajax ile birlikte kullanılabilir bir duruma getirir.
JavaScriptResult: Java Script leri sayfada kullanılabilir biçimde sunar.
ContentResult: Metin içeriği sunar.
FileContentResult: İndirilebilir dosyaları sunar (Binary içerik ile).
FilePathResult: İndirilebilir dosyaları sunar (Dosya yolu ile).
FileStreamResult: İndirilebilir dosyaları sunar (Stream dosyalar için).

Åžimdi de action result ile belirtilen view v.b. yönlendiren metodlara göz atalım. AÅŸağıda vereceÄŸimiz bütün metodlar Controller ‘dan türetilmiÅŸtir.

View: Action sonucunda ViewResult ‘a yönlendirilir.
Redirect: Action sonucunda RedirectResult ‘a yönlendirilir.
RedirectToAction: Action sonucundan RedirectToRouteResult ‘a yönlendirilir (action yardımıyla yönlendirilir).
RedirectToRoute: Action sonucunda RedirectToRouteResult ‘a yönlendirilir (route yardımıyla yönlendirilir).
Json: JsonResult döndürür.
JavaScriptResult: JavaScriptResult döndürür.
Content: Action işlemi sonucunda ActionResult döndürür.
Controllerda yer alan metodlar yardımıyla view sayfalarda nasıl verileri gösterildiğine değiniyoruz.

public ActionResult About()
{
     return View();
}

Controllerda View sayfalarla ilişkili olan metotlara yaptığımız işlemler sonucunda son kullanıcıya verilerimizi ve istediğimiz diğer bütün içerikleri gösterebilmemiz mümkündür.

View 'ı Anlamak

View, son kullanıcıdan gelen istekleri alarak ne gibi bir iÅŸlem yapılacağına iliÅŸkin katmana yönlendirir. Yönlendirme iÅŸlemi Controller katmanına ya da baÅŸka bir view sayfasına olmaktadır. View sayfa üzerinden db iÅŸlemlerine herhangi bir istek gönderilmemektedir. Bu iÅŸlem için ilk olarak Controller katmana yönlendirilir oradan da db model ‘e yönlendirilir. Sonrasında alınan veriler ilk olarak Controller ‘a oradan da UI yardımıyla view sayfaya gönderilir ve son kullanıcı istediÄŸi veriyi oldukça hızlı bir biçimde görmüş olur.

MVC view katmana biraz deÄŸinmek gerekirse,

1.  DB model ile direkt olarak hiçbir iliÅŸkisi yoktur. Bu iÅŸlemler için Controller dan yararlanmaktadır.

2.  İçeriÄŸinde, *.master, *.ascx, *.aspx ve bunlara benzer diÄŸer dosya formatlarının kullanılması önerilmektedir.

3.  Index.aspx sayfamızı View klasörünün içerisindeki Home klasörüne eklenmesi önerilmektedir. Yani oluÅŸturulan web sayfalarını amacına ve Controller ‘a göre klasörleyerek hazırlanması daha mantıklı bir yöntem olacaktır. Ayrıca eÄŸer ki home klasörümüzü silerek tekrardan homeController.cs sınıfımız üzerinden oluÅŸturmak istediÄŸimizde Controller ‘ın önünde olan Home ismi ile bir klasör olÅŸuturur ve içerisinde yer alan metodlardan da yararlanarak web sayfalarını oluÅŸturur. Bu web sayfalarının *.aspx.cs dosyaları bulunmamaktadır. Controller bu bölümde yapılacak bütün iÅŸlemleri yapmaktadır.

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2><%= Html.Encode(ViewData["Message"]) %></h2>
    <p>
         To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>
</asp:Content>

HomeController yardımıyla otomatik olarak oluÅŸturulan Index.aspx sayfasının markup kodu yukarıdaki gibidir. Yukarıdaki ViewData HomeController sınıfında oluÅŸturulan ActionResult ‘a göre iÅŸlem yapacak Index() metodu yardımı ile oluÅŸturuÅŸtur.

View sayfada gösterilecek mesaj için Controller sınıfımızda ViewData dictionary ‘sine ekleriz. ViewPage<T> ÅŸeklinde verileri göstermektedir. T ile veri nesnesini kabul etmektedir.

Asp.Net URL Routing ‘i Anlamak

ASP.NET MVC Framework sayfalarda Controller sınıfları ile action arasındaki ilişkiyi view sayfalarla bağlantıyı URL Routing yardımı ile yapmaktadır. URL routing patterni uygulamamızın içerisinde yer alan Global.asax dosyasında yer almaktadır. Bu pattern [controller]/[action]/[id] ile yönlendirme işlemlerini yapmaktadır.

Global.asax.cs ‘in içerisinde otomatik olarak oluÅŸturulan kod parçalarına göz atalım.

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

         routes.MapRoute(
                 "Default", // Route name
                 "{controller}/{action}/{id}", // URL with parameters
                 new { controller = "Home", action = "Index", id = "" } // Parameter defaults
                 );
    }

    protected void Application_Start()
    {
          RegisterRoutes(RouteTable.Routes);
     }
}

Biraz öncede açıklamış olduÄŸumuz gibi Controller/Action/Id patterni ile iÅŸlemekte ve eÄŸer ki herhangi bir istek olmazsa yani sayfa ilk açıldığında hangi sayfaya yönleneceÄŸini belirten default url ‘da yer almaktadır.

Yazımızın bu bölümüne kadar anlattıklarımız doğrultusunda internet sayfamızı çalıştırırsak nasıl bir görünüm alacağımıza göz atalım.

Index.aspx ‘te gösterilecek veriyi ViewData dictionaryde tuttuÄŸumuzu belirtmiÅŸtik. Bunu aÅŸağıdaki ekran görüntüsünde görebilmeniz mümkündür.



İşlemi devam ettirip sayfamıza baktığımızda bize şu şekilde bir ekran görüntüsü sunulmaktadır.



Varsayılan URL default.aspx üzerinden yönlendirildiği için adres çubuğunda adresimiz gizlenmiş olarak gözükmektedir.

MVC Framework ‘ün ana çalışma prensibi Controller/Action/Id olduÄŸundan defalarca bahsetmiÅŸtik. Åžimdi bunun nasıl bir sonuç verdiÄŸini görmek için About seçeneÄŸine tıklayıp adres çıubuÄŸuna bakmamız yeterli olacaktır.



Adres çubuğunda da gördüğünüz gibi HomeController sınıfından About metoda karşılık gelen sayfa çağırılmış.

Geldik bir yazımızın sonuna daha. Sonuç olarak nelere değindiğimize son kez göz atmak gerekirse, MVC patterninin ne olduğuna, yeni bir mvc uygulama nasıl oluşturuluyor ve bu oluşturulan uygulama hangi varsayılan dosyalar ile oluşturulduğunu detaylı bir biçimde incelemeye çalıştık.

Herkese mutlu günler diliyorum.

Yorum Gönder

0 Yorumlar

Ad Code

Responsive Advertisement