“Tasarım kalıpları”(design patterns) kavramları her yazılımcının bir şekilde duyduğu, hatta çoğu yazılımcının başvurduğu mimari yaklaşımlar olarak yazılım mühendisliği alanında yer etmiştir. Kimileri ne gerek var, kimileride olmazsa olmaz gibi yaklaşımlarla tasarım kalıpları hakkında düşüncelerini belirtsede ister istemez bir şekilde her yazılımcının fark etmeden bile biraz olsun kullandığı bazı kalıplar vardır. MVC(Model View Controller) bunlardan biridir, hatta farkında olmadan en çok kullanılan tasarım kalıplarından biridir. Bunun nedeni uygulama geliştirme araçlarının artık bu tarz kalıplar ile geliştirme yapmakta kolaylık sunuyor olması. Bu kısma fazla girmeden MVC’nin ne olduğunu biraz daha açalım.
Mimari yönden önemli olan seperation of concerns(ilgilerin ayrımı), MVC’nin temelinde olan en önemli olan kavramdır. Peki ne demek bu ilgilerin ayrımı ya da neden gerekli? En basitinden çok kullanılan “iş mantığı(business logic) ve veri yapısının(data) birbirinden ayrımı” ilgilerin ayrımı kavramına en soyut örnek olabilir. Yazılımı oluşturan kavramların bir birinden ayrılması, kendi özelliklerinin bağımsız olarak ele alınması ilgilerin ayrımı olarak adlandırılabilir. Neden gerekli olduğuna gelince de, bu yazılımın yenilenebilir ve canlı olması gerektiği gibi mimarı yaklaşımlar ile açıklanabilir.
Basit bir örnek ile ilgileri neden ayırmak gerektiğini biraz daha açalım. Bir uygulama düşünün, belli iş kurallarına göre, belli bir data üzerinde işlemler yapan ve bunları müşteriler ile paylaşan. Ve bunları yaparken iş mantığının da arayüz ile beraber iç içe yapıldığını farz edin. En basitinden iş mantığında ki bir değişiklik, arayüz kodlarına müdahale edilmesine, basit bir deployment güncellemesinde komple tekrar bütün kodların işleme alınmasına neden olacaktır. Bu sadece çıkabilecek basit bir sorun.
Değişen iş mantığının data yapısına,yada kullanıcı arayüzüne etkisi minimum derecede olması gerekmektedir. Bu kısımda MVC yaklaşımı ortaya çıkıyor.
MVC yaklaşımında;
Model:Uygulama tarafından sunulacak olan bilgiler Model ismi altında ele alınıyor. Business işlemleri sonuçlarında yorumlanmış data,ya da ham data Model altında ele alınabilir. Bu datalar,bir web servisinden,bir dosyadan yada bir database’den geliyor olabilir. Kısaca nereden ya da nasıl geldiği önemli olmayan veri kümeleri Model çatısı altında ele alınır. Örnek vermek gerekirse de .NET’deki DataSet,DataTable kavramları gösterilebilir.
View:Model’in görüntülendiği kısımdır. Daha da anlaşılır olarak, UI(userinterface) kısmı View çatısı altında ele alınır. ASP.NET’deki Aspx sayfaları ve .ascx kullanıcı kontrolleri view çatısı altında ele alınabilecek kavramlar olarak örnek gösterilebilir.
Controller:View çatısı altındaki elemanların etkişelimleri Controller altında ele alınır. Model üzerinde değişiklikler yapılabilmesini sağlayan işlemler,işlemleri tetikleyen etkiler Controller çatısı altındadır. Yine .NET’deki event ve handler mekanizmaları örnek olarak gösterilebilir.
Bir web uygulaması akışı üzerinden MVC mantığını biraz daha pekiştirelim.
- Kullanıcı web sayfasını(View) görüntüler.
- Sayfa ile bir buton’a basarak etkileşime girer.
- Bu etkileşim sonucunda ki olay veriye(Model) etki eder.(Controller)
- Veri(Model) güncellenir,değişir, değişen yapıya göre tekrar View oluşur.
Bu akıştan; View, Model’ın nasıl değişeceğini bilmez. Model için View’in nasıl olacağı önemli değildir, gibi yargılara ulaşabiliriz ki amacımız da buydu.
MVC’yi basitçe anlatabilmişimdir umarım, bu basit bilgilendirme umarım biraz daha bazı şeylerin netleşmesinde yardımcı olmuştur. İlerleyen zamanlarda benzer konular ile bu yönde öğrendiklerimi,yaptıklarımı paylaşacağım.Sizinde düşünce ve fikirleriniz varsa, benimle paylaşmaktan çekinmeyin…