MVC (Model-View-Controller) mimarisi nasıl çalışır?
MVC, uygulamayı veri, arayüz ve akış denetimi olarak ayıran mimari desendir. Nasıl çalıştığını, örneğini ve MVVM ile farkını öğrenin.
MVC mimarisi nedir?
MVC (Model-View-Controller), bir uygulamanın sorumluluklarını ayırmak için kullanılan mimari desendir. Model verileri ve iş kurallarını, View kullanıcıya gösterilen arayüzü, Controller ise kullanıcı girdilerini alıp Model ile View arasındaki akışı yöneten bileşeni temsil eder. Amaç, uygulamanın her parçasının tek bir sorumluluğa odaklanması ve böylece değişikliklerin diğer parçaları etkilememesidir.
Desen ilk olarak masaüstü arayüz geliştirmede ortaya çıkmıştır; bugün web çerçevelerinin birçoğunda, Spring MVC ve ASP.NET Core MVC dahil, temel yapı olarak kullanılır.
Bileşenler ve görevleri
Her bileşenin sınırı şöyle çizilir: • Model: veriyi, veri üzerindeki kuralları ve doğrulamaları taşır. Arayüzden habersizdir. • View: Model'den aldığı veriyi kullanıcıya gösterir. İş mantığı içermez, yalnızca sunumdan sorumludur. • Controller: gelen isteği karşılar, gerekli işlemi yapması için Model'i çağırır ve sonuca göre hangi View'un gösterileceğine karar verir.
Bu ayrım sayesinde bir View, Model'e dokunmadan değiştirilebilir; Model'in kuralları ise farklı arayüzlerden yeniden kullanılabilir. Ayrıca her bileşen kendi başına test edilebilir.
Bir web isteğinde MVC nasıl işler?
Örneğin bir kullanıcı sipariş detay sayfasını açıyor. Tarayıcı bir adres isteği gönderir; çerçeve bu adresi ilgili Controller yöntemine yönlendirir. Controller, sipariş numarasını alıp Model katmanından siparişi çeker. Veri alındıktan sonra Controller, veriyi bir View şablonuna aktarır; View sipariş bilgilerini sayfa olarak üretir ve yanıt kullanıcıya döner.
Kullanıcı bir form gönderdiğinde akış tersine benzer: Controller girdiyi doğrular, Model üzerinde değişikliği yaptırır ve sonucu yeni bir View ya da yönlendirmeyle yanıtlar. Doğrulama ve kuralın yeri kadar, Controller'ın ince tutulması da iyi uygulamanın parçasıdır.
MVC, MVP ve MVVM farkı
MVC'nin türevleri benzer ayrımı farklı bağlarla kurar. MVP (Model-View-Presenter) yapısında View daha pasiftir ve tüm sunum mantığı Presenter'dan geçer. MVVM (Model-View-ViewModel) yapısında ise View, ViewModel'e veri bağlama ile bağlanır; arayüz durumu ViewModel'de tutulur ve değiştiğinde View kendiliğinden güncellenir. İstemci tarafı arayüz çerçevelerinde MVVM ve benzeri desenler daha yaygındır.
Sunucu tarafında sayfa üreten klasik web uygulamalarında MVC doğal bir uyum sağlar. Ancak servis olarak API sunan uygulamalarda View yerine veri biçimi (JSON gibi) döndüğü için Controller ve Model arasındaki ayrım öne çıkar.
Yaygın hatalar
En sık görülen hata şişman Controller'dır: iş kurallarının, veri erişiminin ve doğrulamanın Controller içine yığılması. Bu durumda Controller test edilemez ve yeniden kullanılamaz hale gelir. İş kuralları Model ya da ayrı bir servis katmanına taşınmalıdır.
Bir diğer hata, View içine iş mantığı koymaktır: şablonda karmaşık koşullar ve hesaplamalar sunumu bakım yükü haline getirir. Bir başka yaygın hata ise MVC'yi tüm mimarinin cevabı saymaktır; büyük sistemlerde servis katmanı, depo (repository) katmanı ve mikroservis sınırları gibi başka yapılar da gerekir.
Mindset programlarında nerede çalışılır?
Mindset kataloğundaki Java ile Spring Boot Backend eğitimi, modül başlıklarına göre Spring Web MVC ve REST API, veri katmanı ve güvenlik konularını içerir; MVC desenini gerçek bir backend uygulamasında kurmak isteyen geliştiriciler için uygundur. ASP.NET Core ile Minimal API Geliştirme eğitimi MVC'ye alternatif, daha hafif bir API yaklaşımını anlatır. Spring Boot İleri Seviye: Reactive ve WebFlux ise Spring MVC'den farklı olarak reaktif servis geliştirmeye odaklanır; bu yapılar karşılaştırılarak çalışmak isteyen ekipler için faydalıdır.
İlgili Mindset programı
Java Spring Boot ile Backend
Sık sorulan sorular
MVC yalnızca web uygulamalarında mı kullanılır?
Hayır. Desen önce masaüstü arayüzlerinde ortaya çıkmış, sonra web çerçevelerinde yaygınlaşmıştır. Mobil ve masaüstü uygulamalarda da benzer ayrım kullanılır; ancak bu ortamlarda MVVM gibi türevler daha sık tercih edilir.
MVC ile katmanlı mimari aynı şey midir?
Aynı değildir. Katmanlı mimari uygulamayı sunum, iş mantığı ve veri erişimi gibi yatay katmanlara böler. MVC ise sunum katmanının kendi içindeki sorumluluk ayrımını tarif eder. İkisi birlikte kullanılır; MVC çoğunlukla sunum katmanını düzenler.
Controller'a iş mantığı yazılmalı mı?
Yazılmamalıdır. Controller isteği karşılayıp doğru bileşene yönlendiren ince bir katman olmalıdır. İş kuralları Model ya da servis katmanında tutulursa test etmek ve başka bir arayüzden yeniden kullanmak kolaylaşır.
Minimal API MVC'nin yerine mi geçer?
Birbirinin yerine geçmez; farklı ihtiyaçlara yöneliktir. MVC, sayfa üreten ve ayrıntılı yapı isteyen uygulamalarda güçlüdür. Minimal API ise hafif servislerde ve basit API uç noktalarında daha az kodla çalışmayı sağlar. Seçim projenin ölçeğine bağlıdır.