Model, View ve Controller yani kısaca MVC Nedir ? diye araştırıyorsanız, muhtemelen herhangi bir dilin framework’ ü ile ilk kez tanıştınız ve dökümantasyonunda MVC pattern ifadesini gördünüz.

İnternet endüstrisinin gelişmesi ile modern web uygulamaları geliştirilmeye başlandı. Günümüzdeki online uygulamalar ile 1990 ların statik web sayfalarını kıyaslamaya kalkarsak, arada uçurum olduğunu görebiliriz. Milyonlarca ve hatta milyarlarca kullanıcıya hizmet vermek, çeşitli fonksiyonları ölçeklenebilir şekilde uygulayabilmek için, uygulamalarımızın mimarisi de bunu karşılayabilecek şekilde olmalı. İşte MVC mimari deseni tam da burda devreye girmekte.

Peki MVC’ yi anlamak önemli mi ?
Kısa cevap EVET.

MVC çok önemlidir çünkü pek çok web uygulaması bu yapı üzerine kuruludur. Bu tasarım deseninin geçmişi ise 1978 lere dayanmakta. Link

Teknik detaylara girmeden önce, günlük hayattan bir MVC örneklemesi yapıcam. Basite indirelim, balık ekmek satan bir dükkana gidiyorsunuz, Garson arkadaş bizi karşılıyor. Siparişimizi alıyor. Mutfağa iletiyor. Mutfaktakiler, balık ekmeği yapıp garsona veriyor ve balık ekmek tabak içinde masamıza geliyor.

İşte burdaki rolleri tanımlarsak;

  • Controller : Garson
  • Model : Mutfak Ekibi
  • View : Tabak içinde gelen balık ekmek

Bunu grafik ile göstermek gerekirse;

  1. Kullanıcı yani müşteri olarak istekte bulundunuz
  2. Controller yani garson siparişinizi aldı
  3. Model yani mutfağa iletti ve balık ekmek pişirildi(isteğiniz göre işlemler yapıldı)
  4. View yani siparişiniz(isteğiniz) sunuma hazır hale getirildi.
  5. Çıktı tarayıcınıza gönderildi.

Bunu herhangi bir modern web sitesi üzerinden örneklersek;
Facebook ta arkadaşlarım butonuna tıkladınız, isteğiniz /friends route’ a gitti. FriendsController a iletildi. Controller bu isteği Model’ e gönderdi. Burda ilk önce gerekli kontroller yapıldı(login durumunuz, vb.) ardından data kaynağından arkadaş listeniz çekildi. Dizi halindeki arkadaş listeniz, ilgili view template de şekillendi ve yine controller üzerinden tarayıcınıza gönderildi.

Kendi içinde benzer işlerin gruplanıp, diğerlerinden ayrılması prensibine bilgisayar biliminde "separation of concerns" diyoruz.

Aşağıdaki grafikte de bunu detaylı olarak inceleyebilirsiniz.

Model, View ve Controller katmanlarının asla birbirinin işine dahil olmaması gerekiyor.

Asla yapılmaması gerekenler;

  • Controller katmanında direk veri kaynağına erişmek
  • Model katmanında veriyi Html vb. kodlar ile biçimlendirmek
  • View katmanında veri dışında mantıksal kontroller yapmak.

Şimdi bu katmanları tek tek ele alalım;

– Controller
Kullanıcının yapabileceği tüm istek çeşitlerini bilmesi ve buna göre diğer katmanlara yönlendirme yapması gerekiyor.

– Model

Kendisine yönlendirilen her işlem için, geri dönüş yapması gereken verilerin hangi alanlar olduğunu bilmesi gerekiyor.

– View
View katmanı, framework bazlı syntax içerir. Kendisine gelen veriyi html çıktısına dönüştürmek için, if, else , loop vb. gibi komutları vardır.
Kendisine gelecek veri modelini bilmeli ve tüm ihtimalleri ele alan bir yapıda yazılmış olması gerekir.

Framework içinde MVC kullanımı

https://gelistir.net/11/model-view-controller-mvc-nedir/ adresine istek yaptığımızı düşünürsek;

Bu istek ilk olarak framework’ ün Route katmanına geliyor ve şu tarz bir kod parçası ile karşılanıyor.

app.UseMvc(routes =>
{
   routes.MapRoute("blog", "{*id}/{*title}",
            defaults: new { controller = "Blog", action = "Article" });
});

Görüleceği üzere, istek url’ in de domain’ den sonra eğer slash ile ayrılmış 2 parça bulunuyorsa, ilk’ ini id değişkeni, 2. si title değişkeni olarak ele alıp, BlogController’ ın Article method’ una passlıyor.

Controller’ da ise şuna benzer şekilde id ve title değişkenlerini ele alıyoruz.

using Microsoft.AspNetCore.Mvc;
namespace myApp.Controllers
{
    public class BlogController : Controller
    {

        public string Article(int id, string title)
        {

        }
    }
}

id değişkeni daha sonra ilgili model’ e paslanıyor ve bir data elde ediliyor. View katmanında şuna benzer şekilde ele alınıp, html e çevriliyor.

<h1>@Model.title</h1>
<p>@Model.post</p>

Bu view katmanında bu işlemleri gerçekleyebilmek için, controller daki method’ umuzun en sonunda şu şekilde bir return almamız gerekiyor.

return View("Post", Post);

Görüleceği üzere View methodunun ilk parametresi View’ ın ismi yani bizim örneğimizde Post adlı view, 2.parametre ise, bu view’ a gönderilecek verinin ismi. Bu veriyide Model katmanından elde etmiştik.

ÇOK basit olarak MVC bu şekilde çalışmaktadır.

.net core framework’ ün en başından sonuna kadar request life cycle’ ı anlattığım yazılarda görüşmek üzere.

Last modified: 1 June 2019

Author

Comments

Write a Reply or Comment

Your email address will not be published.