MİMARİ ÖRÜNTÜLER
MVC (Model View Controller)
Kullanıcı Arayüzü geliştirirken kullanılan Mimari Örüntülerden biride MVC örüntüsüdür. Amacı View ve Model’ in birbirlerine direk erişmesini engellemektir. Controller View ile Model birbirinden soyutlayarak iş mantıklarını kendi bünyesinde toplar.
Bu örüntü, kullanıcı arayüz uygulamalarının(masaüstü, web, mobil) bir çok bileşenin aynı yapıda çalışmasını zorunlu tutarak yazılım geliştiricilerin kodu okumalarını kolaylaştırır. Aynı zamanda bileşen mekaniklerinin aynı şekilde çalışması, hem ölçeklenebilir bir yazılım geliştirmenizi, hemde bileşenlerde oluşan bir takım hataları kısa zamanda düzeltebilmenizi sağlar.
Bu bileşenlerin Controller üzerinden birbirleri ile iletişimi konusunda Mediator veya Observer gibi tasarım örüntüleri kullanılabilir. Ama asıl olan bileşenlerin iç işleyiş mekaniğini diğer tüm bileşenlerde gördüğümüz bu yapıyı Model View Controller denir.
Öncelikle MVC’nin soyutlama bileşenlerini incelersek;
- View: Kullanıcı ile etkileşimi olan arayüzleri içeren kısımdır. Kullanıcı girdilerini dinler ve bunları yönetmesi için Controller iletir. Bu girdilere örnek vermek gerekirse Mouse, Keyboard, Ses, Dokunmatik Ekran, Hareket Sensörü olabilir bu girdiler. Aynı zamanda view içeriğinde uygulama state(durumu) içeren verileri kullanıcıya göstermekten sorumlu birimdir.
- Model: Uygulamada ekranda gösterilecek olan veriyi tutan kısımdır. Bu kısımlar uzak sistemlerden gelen güncellemeler veya kullanıcı girdilerini sonuçlarının yansıtıldığı verinin en güncel halini yapılarında tutarlar.
- Controller: Hem model , hemde view referansını tutarak ikisi arasındaki koordinasyonu sağlar. Yapılması gereken business işlemleri yerine getirir.
Nasıl çalışır ?
Örnek üzerinden gidersek konuyu daha iyi anlatabileceğimi düşünüyorum. Elimizde kullanıcı bilgileri olsun, bu kullanıcı bilgilerini kullanıcı arayüzünde göstermek isteyelim. Ve kullanıcılardan birisi silinince ilgili veri gözükmemesi veya başka bir sunucudaki arayüzden yeni bir kullanıcı eklendiğinde bu ekranda yeni kullanıcıyı görebilmek isteyelim.
Sınıf İsimlendirmelerini aşağıdaki şekilde tanımlayalım.
- TableView
- TableModel
- TableController
Bu durumda
Senaryo 1 (Model Verisini Ekranda Gösterilmesi)
Model verisi sunucunda çekildiğinde veya başka bir ekrandan yeni bir kullanıcı eklendiğinde bu güncelleme bilgisini → Controller iletir. Controller bu bilgiyle View günceller. Burda dikkat edilmesi gereken konulardan birisi bu güncelleme sırasında Kullanıcı Table Scroll ederek ekranda bir yerlere odaklanmışsa kullanıcının mevcut durumunun bozulmaması gerekir. Bu gibi durumlarda ekranda belki ufak bir uyarı göstererek mevcut görüntüye Update geldiği bildirilebilir. Kullanıcı bu bildirimi basınca TableView bu güncellemeyi gösterir.
Model → Controller → View akışı gerçekleşir.
Senaryo 2 (Kullanıcının , Tablodaki Elemanlardan Bir Tanesini Silmesi)
Bu durumda View bu değişiklik isteğini algılayıp bunu Controller iletecek. Burda önemli olan konu View bu işlemi kendisinin yapmaması, belkide silme yetkisi olmadığı için veri silinmeyecek. Controller tüm kontrolleri yaptıktan sonra verinin silinmesi için Model’e güncelleme gönderir. Model bu güncellemeyi veri üzerine yansıttıktan sonra tekrardan Controller bu güncellemenin yapıldığı bilgisini gönderir ve bu doğrultuda View güncellenir.
View → Controller → Model → Controller → View akışı gerçekleşir.
Okumaya Devam Et 😃
Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.