info@iztim.com
+90 (232) 347 6340

MVC Nedir ?

Model-view-controller (MVC), yazılım mühendisliğinde kullanılan bir “mimari desen” dir.

 

MVC NEDİR? 

MVC kim tarafından bulunmuştur?

 

Model-view-controller (MVC), yazılım mühendisliğinde kullanılan bir  “mimari desen” dir. Bu desen Trygue Reenskaug tarafından ilk olarak tanımlanan bir desendir. Daha sonra Smalltalk üzerine yapılan araştırmalar Xerox araştırma laboratuarlarında devam etmiştir. 

 

Birçok bilgisayar sisteminin amacı, bir veri deposundaki veriyi almak ve kullanıcıya göstermektir. Kullanıcı veri değişikliği yaptıktan sonra, sistem bu güncellemeleri veri deposunda saklar. Çünkü en önemli bilgi akışı, veri depolamak ve kullanıcı arayüzü arasındadır. Eğer kodlama miktarını azaltmak ve uygulama performansını artırmak istiyorsanız bu ikisi arasındaki bağı iyi kurmalısınız. 

 

Ancak, görünüşte doğal olan bu yaklaşımda bazı önemli sorunlar var. Bir sorun, kullanıcı arabiriminin sıklıkla veri depolama sisteminde değişiklik yapma eğiliminde olmasıdır. Diğer bir sorun ise, iş uygulamalarının veri ve kullanıcı arayüzü arasındaki iş mantığını birleştirmek eğiliminde olmasıdır, bu veri iletimin ötesine geçmektedir. 

 

Kullanıcı arayüzü mantığı özellikle web tabanlı uygulamalarda daha sık iş mantığını değiştirmek eğilimindedir. Bir örnekle bunu açıklayacak olursak, yeni bir kullanıcı arayüzüne sayfalar eklenebilir veya elde olan sayfaların düzenlemelerinde karışıklıklar olabilir. Sonuçta uygulamayı yeniden yeniden dağıtmaya gerek kalmadan, istediğiniz zaman kullanıcı arayüzünü değiştirek, Web tabanlı ince istemci uygulamasının (Web-based thin-client application) avantajlarından birisidir. Eğer sunum kodu ve iş mantığı tek bir nesnede  birleştirilirse, kullanıcı arayüzü veriyi değiştirdiğinde, iş mantığı da her zaman içerdiği nesneyi değiştirmek zorundadır. Kullanıcı arayüzünün yaptığı en ufak bir değişiklikte  bile hatalara bakmak ve bütün iş mantığını yeniden kontrol etmek gerekir. 

 

Bazı durumlarda uygulama aynı bilgiyi başka yollarla gösterir. Örneğin, bir analizin sonucu tablo ile de, psta yöntemiyle de gösterilebilir. Bazı zengin kullanıcı arabirimleri, aynı verileri birden fazla kez  aynı anda gösterir. Kullanıcı herhangi birinde veri değişikliği yaptığında, sistem diğerlerini de otomatik olarak değiştirmek zorundadır. 

 

Görsel olarak çekici ve etkili bir HTML sayfaları tasarımı genellikle çok beceri gerektiren ve karmaşık iş mantığının geliştirilmesi gereken bir iştir. Bir kişinin ikisini de gerçekleştirmesi nadirdir. Bu nedenle , bu iki bölümdeki geliştirme çabaları ayrılmak istenmiştir. 

 

Kullanıcı ara birimi genel olarak iki bölümden oluşur : sunum ve güncelleme. Sunum kısmı data kısmından veri alır ve biçimleri görüntüler. Kullanıcı verilerine dayanan bir eylem gerçekleştirdiğinde, güncelleştirme kısmının verileri güncellemesi için iş mantığı geri kontrol geçirir. 

 

Web uygulamalarında, çoğu durumda hedef sayfa doğrudan eylem ile ilgili olmayabilir. Örneğin, basit bir Web uygulaması düşünelim. Bu web uygulaması bir öğe listesi göstersin. Kullanıcı listeye bir şey ekledikten ya da listeden bir şey çıkardıktan sonra anasayfaya geri döner. Bu nedenle, uygulamayı aynı HTTP isteği içinde iki çok farklı komutları(ekleme veya silme) yürüttükten sonra aynı sayfada listelemek gerekir. 

 

Kullanıcı arayüzü kodu, iş mantığından daha fazla aygıta bağımlı olma eğilimindedir. Tarayıcı tabanlı bir uygulama geçirmek istiyorsanız, kişisel digital asistanlar(PDAs) veya Web özellikli cep telefonlarını desteklemek için, birçok arabirim kodunu değiştirmeniz gereklidir, oysa iş mantığı bundan etkilenmeyebilir. Ayrılan bu iki parça, geçişi hızlandırmayı ve iş mantığı için hataları tanıtan riski en aza indirmeyi sağlar. 

Kullanıcı ara birimi için otomatik testler oluşturmak genellikle iş mantığı için daha zor ve zaman alıcıdır. Bu nedenle, kod miktarını azaltmak uygulamanın test edilebilirliğini artırır(kullanıcı arayüzüne bağlı olduğundan).

 

 

NASIL BİR ÇÖZÜM BULUNDU?


MVC deseni üçe ayrılır: etki modelleme, sunum ve kullanıcı girişi dayalı eylemler. Yani MVC ile,  iş mantığı ve arabirim birbirinden ayrılır. Bu iki katman veritabanının sembolleştirildiği model ile desteklenirse model-view-controller oluşmuş olur.

 

MODEL: İş mantığının veriyi kullanması için verinin şekillendirilmiş halidir. Model, davranış ve uygulama etki alanı verilerini yönetir, durumu hakkında bilgi taleplerini yanıtlar ve durumu değiştirmek için talimatlara tepki verir. (genellikle controller yani denetleyici tarafından ) Model tek katmanlıda olabilir, çok katmanlı da olabilir. 

 

GÖRÜNÜM: VİEW: Bilgi ekranını yönetir. Diğer bir deyişle, uygulamanın arabirimine ait olan her şey view kapsamına girer. Algoritma içermez. Bu sayede HTML ve kodu birbirinden ayırarak değiştirilmelerini kolaylaştırır. 

 

DENETLEYİCİ: CONTROLLER: Bu bölüm kullanıcının fare ve klavye girişlerini yorumlar, modeli bilgilendirir, uygun değişiklikleri yapar. Algoritma ve iş mantığını içerir. 

 

Her görünüm(view) için bir denetleyici bulunur.                                                                            

Microsoft un resmi sitesine göre MVC deseninin populerliği bir dizi hatalı açıklamaya yol açtı. Özellikle, “controller” terimi farklı bağlamlarda, farklı şeyler anlamında kullanıldı. Neyseki Web uygulamalarının gelişi bazı belirsizliklerin çözülmesine yardımcı oldu. (çünkü view ve controller arasındaki mesafe çok açıldı) 

 

DEĞİŞİMLER


In Application Programming in Smalltalk-80: How to use MVC [Burbeck 92] adlı kitabında Steve Burbeck Model-View-Controller (MVC) için iki çeşit modelden bahsetmiştir.

 

Bunlar “pasif model” ve “aktif model” dir.

 

PASİF MODEL: 

Modeli sadece bir kontrolör yönettiği zaman pasif model kullanılır. Kontrolör modeli değiştirir ve bilgiyi görüntüler, böylece model değişir ve yenilenmiş olur. Bu senaryodaki modelde görünüm(view) ve kontrolör(controller) birbirinden tamamen bağımsızdır. Bunun anlamı modelin içinde yaptığı değişikliği rapor vermesinin gereksiz olduğudur.

 

HTTP protokolü bunun için iyi bir örnektir. Tarayıcıda sunucudan asenkron günceleştirmelerini almanın basit bir yolu yoktur. Tarayıcı görünümü görüntüler ve kullanıcının girdisine cevap verir, fakat bu sunucudaki değişiklikleri algılamaz. Sadece kullanıcı açıkça bir yenileme olduğunu istediğinde , sunucu(server ) değişiklikleri sorgular. 

 

Pasif modelin şekli aşağıdaki gibidir. 

 

AKTİF MODEL: (ETKİN MODEL) 

 

Denetleyici dahil olmadan durum değiştiğinde aktif model kullanılır. Bu, diğer kaynaklardan veri değiştiği zaman meydana gelebilir ve değişikliklerin görünüme yansıtılması gerekir. Bir hisse senedi ekranını örnek olarak düşündüğümüzü varsayalım

 

Stoktaki veriler değiştiği zaman,  harici kaynaktan bir veri almak ve bunu görünümde değiştirmek istiyoruz. Çünkü böyle olduğunda, model sadece iç durumundaki değişiklikleri tespit edip, model ekranını yenileyecek  ve bunu bildirecektir. 

 

MVC deseni kullanarak yapılan motivasyonlardan biride modelin görünümden bağımsız olmasıdır. Eğer model görünümdeki değişikliği bildirmek için olsaydı, tekrar bilgilendirme bağımlılığının önlenmesinin bir yolunu arıyor olurlardı. Neyseki desende, gözlemci durum değişikliklerini, bağımlılıkları tanıtan olmadan, diğer nesneleri uyarsın diye bir mekanizma sağlamaktadır. 

 

Gözlemci arabirimi(Observe interface) uygulaması bireysel görünümü modele kaydeder. Model tüm gözlemcilerin listesindeki değişikliği aboneye söyler. Model ne zaman değişirse, modelde kayıtlı olan tüm gözlemcilerde yinelenir ve değişimi bildirir. Bu yaklaşımın genel tabiri  “abone yayımlama” (publish-subscribe) dır. Model hiçbir zaman herhangi bir görünüm için özel bilgi gerektirmez. Aslında bu bilgilere göre bakarsak denetleyicinin(kontrolör) modelin değiştiğini bilmeye ihtiyacı vardır. (örneğin: menü ekleme, menü çıkarma yaparken) Bunun için yapması gereken gözlemci arabirimini uygulamak ve model değişikliklerini belirtmektir. Bu durum için birçok görüş belirtilmiştir. Birden fazla konu tanımlamak için mantıklı ve her modeli değiştirmek için belirli bir tür açıklar. Her görünüme daha sonra görüntülemek için bilgi değişikleri abone olarak yapılabilir. 

 

Aşağıdaki şekil MVC kullanılarak gözlemci (Observer) yapısını gösterir ve gözlemcinin doğrudan başvurduğu modeli izole eder.

 

MVC NASIL ÇALIŞIR? 

MVC soyutlaması şöyle bir grafikle gösterilebilir. 

 

Hepsinin özetini düşünecek olursak ; 

 

Olaylar, bir model, görünüm veya ikisini de değiştirmek için denetleyiciye ihitiyaç  duyarlar. Modelin veri ya da özelliklerinden biri değiştiğinde, otomatik olarak tüm bağımlı şeyler güncellenir. Benzer bir şekilde, kontrolör her görünümü değiştirdiğinde,  örneğin; daha önce gizli olan alanları ortaya çıkararak görüntülemek ve kendini yenilemek için temel modele verileri alır.

 

MVC1: 

 

MVC1 birinci nesil bir yaklaşım olduğundan Web için MVC mimarisinde JSP sayfaları ve Java Beans bileşenleri kullanılır. Bu mimaride Web katmanlı JSP sayfalarına erişirken bir web tarayıcısı oluşur. Böylece JSP sayfası, HTML sayfası ve daha sonra görünümü temsil için Web tabanlı Java Beans kaynak seçilen parametreler yolula belirlenir.

 

Görünümde verinin güncelleştirilmesi için http istekleri JSP sayfasına gönderilir, denetleyici mantığı kullanılır ve model çağrılır. Bu yaklaşım bir JSP sayfasında kontrolör(denetleyici) ve görünümü birleştirir, bu nedenle MVC paradigması keser. MVC1 basit geliştirme ve prototipleme için uygundur. Ancak ciddi gelişim için tavsiye edilmez. 

 

MVC1  de HTML ve JSP dosyaları sunumda kod olarak kullanılmaktadır. JSP dosyaları gerekirse veri almak için Java Beans kullanır. 

 

MVC1 de bütün işler safta merkezli yapılır ve işleme mantığı herhangi bir JSP sayfası mevcut anlamına gelir ya da JSP doğrudan çağrılabilir. 

 

Veri erişimi genellikle özel etiket kullanılarak ya da Java Bean i  çağırma yöntemiyle yapılır. Bu nedenle MVC1 de model ve sayfa arasında sıkı bir bağ vardır diyebiliriz. 

 

MVC2 : 

 

MVC2 mimarisi aslında geliştirilmiş bir MVC uygulamasıdır. Büyük değişiklik model artık görünümde olunca patlar. Buradaki temel mesele masaüstü uygulamalarında olduğu gibi servlet( kontrol ve görünüm) yaşam döngüsü olması gerekmez. Servlet genellikle oluşturulan bir kullanıcı isteğiyle Web tarayıcısı tarafından başlar ve cevap ile biter. Model  genellikle birden çok servlet le olabilir çünkü ömrü yetmez. Bu nedenle,  görünüm nesnelerinin iç durum değişikliklerini güvenli bir şekilde bildiremez. 

 

Bu durumun aşağıdaki sonuçları vardır:  

Görünüm bilmeden önce, denetleyici modele işlemek zorundadır. 

 

MVC2 mimarisinde MVC1 mimarisinin sayfa merkezli özelliğini sunum kontrol mantık ve uygulama mantığı tarafından kaldırılır. 

 

MVC2 mimarisinde tüm uygulama isteklerini almak için bir denetleyici(controller) bulunur. Bu denetleyici her isteğe yanıt olarak uygun önlemleri almaktan sorumludur. Java Beans iş nesnesi ve veritabanı tarafından temsil edilmesinin ikinci bir modelidir. Görünüm(view) ya da JSP sayfası bilgileri denetleyici ve modülü tarafından alınır ve kullanıcıya sunar. 

 

MVC1 ve MVC2 arasındaki FARKLAR: 


MVC1 de denetleyici olarak JSP kullanılır, MVC2 de ise denetleyici servlettir. 

 

MVC1 de görünümü kontrol eden bütün elemanlar servlet kullanarak uygulanır, MVC2 de ise görünüm JSP kullanılarak uygulanır ve denetleyici olarak servlet kullanılır çünkü servlet JSP den daha iyidir. Bu da en önemli farktır. 

 

Model 1 e göre Model 2  web uygulaması bağlamında en düzgün olarak anlatılmaktadır.  MVC1 küçük ölçekli uygulamalar için , MVC2 ise büyük ölçekli uygulamalar için kullanılır. Bütün tepkiler JSP tarafından kontrol edildiği için MVC1 küçük ölçeklilerde kullanılır. 

 

MVC2 de istek servlet kontrolünde JSP den geçirilir ya da isteğe bağlı olarak beans ve cevap JSP tarafından verilir ya da başka bir görünüm kullanılır. 

 

MVC2 kullanımında uygulamaları korumak ve genişletmek daha kolaydır. 

 

 

MVC2 uygulaması güvenlik ve giriş için tek bir kontrol noktası sağlar. Bu nedenle model 2 mimarisi en etkileşimli uygulamalar için tavsiye edilir. 

 

MVC1 in getirdiği güzellikleri kullananların vazgeçmesi zorlaşmıştır ama çok eksiği olduğundan dolayı geliştirilmesi gerekiyor. MVC2 nin sürüm notlarına göre çok fazla iyi özellik MVC2 ye eklenmiş. 

 

ÖNEMLİ NOT:  Sürüm notlarına göre MVC1 i MVC2 ye yükseltebiliyorsunuz. Bunun iki yolu var. İlki bütün projeyi tek tek kopyalayıp MVC2 de oluşturulmuş bir projeye kopyalamak. İkincisi ise mevcut projenin referans ayarlarının değiştirilmesi işlemleriyle geçişin sağlanması.

 

SERVLET + JSP + EJB (enterprise java beans) = MVC

Kısaca indirgemeye çalışırsak geri planda çalışan bir servlet var, bu servlet uygulama için gerekli mantıksal işlemleri yapıyor ve bu işlemleri JSP sayfası ön tarafta gösteriyor. Buna da kısaca MVC diyoruz. 

 

 

MVC3: 

MVC3 MVC nin en son ve en büyük sürümlerinden birisidir. MVC3 ün yeni özellikleri MVC1 ve MVC2 deki temel işlemlerle aynı mimariye sahiptir. 

 

İncelediğimiz zaman MVC3, MVC2 sürümüyle uyumlu, bu durumda MVC2 de yapılan projeleri kolaylıkla MVC3 e aktarabiliyoruz. 

 

3 modelinde aynı mimariye sahip olmasından dolayı aynı alanda sahip oldukları yetenekler, birikimler, kullanılan bilgiler, kütüphaneler, okunulan kitapların MVC3 e çok yardımı dokunacak. 

 

MVC3 modeliyle tamamen yabancı olmadığımız bir teknolojiyle karşı karşıya kalıyoruz. Çünkü MVC3 eskilerine ek olarak farklı özellikler ve yenilikler getiriyor. 

 

MVC3 kurulumu MVC2 sürümüyle birlikte kurulabiliyor. Elde var olan “Preview1” sürümünü de, var olan MVC2 projelerini kaldırmaya gerek kalmadan kurabilirsiniz. Böylece projeleriniz hem MVC2 üzerinden çalışmaya devam ediyor, hem de projeleriniz zarar görmüyor.

 

Kübra

                                                            

McAfee SECURE sites help keep you safe from identity theft, credit card fraud, spyware, spam, viruses and online scams