Genellikle büyük çaplı Web projelerinde tek başımıza çalışmayız. Tasarım, back-end servisler, veri modeli gibi ekiplere bölünür projeyi en hızlı ve herkesin en iyi olduğu yerlerde çalıştırarak hızlı ve en sağlam şekilde ortaya çıkarmaya çalışırız. Ne kadar birlikte çalışmaya çalışsak da tasarımı, servisleri ve veri tarafını birbirinden ayırmak gerçekten ustalık ister. Klasik .NET Web ya da main frame PHP geliştiricileri burada ne demek istediğimi daha net anlamışlardır.
Anlatacağım MVC patterni tam da bu sebeple ortaya çıkmış diyebiliriz. Kısaca özetlersek bir projeyi 3’e ayırma ilkesine dayanan bir yaklaşımdır. Model, Controller, View adındaki parçalar sayesinde Tasarımı ve back-end’i birbirinden izole bir şekilde geliştirme olanağı taşındı. Bir zaman kazanımından bahsediyoruz bunun ne kadar önemli olduğunu deadline’ı çok yakın zamana alınan bir iş ile karşılaştığınızda daha net anlayacaksınızdır.
Bu zaman kazanımından da önemli bir konu daha var. Karşılaştırma yaparak ilerleyelim. Dünyada bankacılık sektöründe çalışan personelin kullandığı çoğu uygulama Windows Form üzerine kuruludur. Form uygulamaları o kadar sorunlu uygulamalardır ki yaşadığı sistemi komple ortadan kaldırabilecek düzeydedirler. Nasıl yani diyecek olursanız şöyle örnek vereyim; Bir güncelleme geçtiniz ve ekranda yanlışlıkla “Müşteri” yerine “Musyeri” yazdınız bu durumda bunun düzeltmesini ben UI katmanında yapmalıyım diye düşünebilirsiniz ama aslında UI – BackEnd birbirine girdiği için iki tarafta da değişiklik yapmış gibi baştan kodu derlemek durumunda kalacaksınız ve ufak bir geliştirme için .dll geçmek durumunda kalacaksınız. Bu dediğim problemi şuan aklınıza gelecek tüm büyük şirketler yaşamaktadır. Canlı ortama geçiş süreçleri sırf bu yüzden çok sancılı oluyor ve çok ciddi bir efor harcıyorlar.
MVC ise buna bir çözüm getiren bir yapıdır. V – C katmanlarının birbirinden ayrı olması sayesinde ufak bir UI değişikliği için yazılan back-end kodlarını canlı ortama geçmiyoruz.
Bu kadar zaman ve risk tasarrufu sağlıyan bir yapı performansta iyi olmaz mı? Tabi ki olur 🙂 Web üzerinden ilerleyecek olursak ViewState yüzünden veri çokluğu durumunda hemen performans kaybı yaşanır. MVC ise Viewstate tutmadığı için hiç bir performans kaybına sebep olmayacaktır.
Nasıl çalıştığı konusunda bir fikir sahibi olduysanız yavaş yavaş bu 3 katmanı açıklamaya başlayayım.
Model Nedir?
Her proje’de business logic olmalıdır. Yani her projenin bir iş tasarımı vardır. Ön yüzden gelen verinin iş mantığına göre tutulması, doğrulanması gibi işlemler bu katmanda yapılır.Veri Erişim işlemi de bu katmanda yapılmaktadır. Entity Framework ile uğraşan arkadaşlar için Entity Layer dediğimizde daha anlaşılır olacaktır. Aslında model katmanını da kendi içerisinde parçalara ayırabiliriz. Bu katmanda da birden fazla kişi birbirine dokunmadan çalışabilir. DB dizaynını, validation aşamalarını, iş mantığını birbirinden ayırabiliriz. Lokanta örneği ile devam edeyim Model aslında mutfaktır.
View Nedir?
Adından da anlaşılacağı üzere UI katmanıdır. Kullanıcı ile haşır neşir olan katman arkasındaki iki katmana veri taşıyan katmandır. Kullanıcıdan aldığı veriyi Controller’a iletir. Model’e mutfak demiştik View katmanına garson diyebiliriz. Siparişi alıp aşçıya(Controller)’a iletir. View katmanını da projenin büyüklüğüne göre parçalayabiliriz css, js, html gibi işlemleri birbirinden ayrı gerçekleyebiliriz. Tabi M-V-C gibi ayrılmayacaktır ama olduğu kadar 🙂
Controller Nedir?
Lokanta örneğindeki aşçıdır bu katman. Garsondan aldığı siparişi nasıl hazırlayacağını bilir. Kullanıcıdan gelen isteğe göre ne işlem yapılacağına bu katmanda karar verilir. Request view katmanından sonra buraya gelir ve iş süreçleri işlemeye başlar. Ne işlem yapılacağına burada karar verilir. DB’ye mi kaydedilecek? DB’den veri alıp view’a mı yollayacak ya da baska bir view’a mı gidecek gibi işlemler burada yapılır.