Bu materyal, "Kurumsal Geliştirmeye Giriş" serisinin bir parçasıdır. Önceki makaleler:
Bu yazıda MVC denen bir şeyi öğreneceğiz. MVC'nin ne olduğu hakkında konuşacağız, geçmişine değineceğiz, MVC'de yer alan temel fikir ve kavramları keşfedeceğiz, bir uygulamanın Model, Görünüm ve Denetleyici modüllerine nasıl bölüneceğine adım adım göz atacağız. Spring Boot kullanan küçük bir web uygulaması ve örnek olarak Spring MVC kullanarak, verilerin Java kodundan HTML sayfalarına nasıl gönderildiğini görün. Bu malzemeyi anlamak için, özellikle gözlemci ve cephe olmak üzere tasarım desenlerine aşina olmanız gerekir. HTTP isteklerine ve yanıtlarına aşina olun, HTML'nin temellerini anlayın ve Java ek açıklamalarının ne olduğunu öğrenin. Bir fincan kahve ve atıştırmalık alın ve rahatlayın. Hadi başlayalım.
Bütün bunlardan mantıklı bir sonuç çıkarabiliriz. Karmaşık bir sistemin modüllere bölünmesi gerekir. Bu ayrımı gerçekleştirmek için yapılması gereken adımları kısaca anlatalım.
Model, view ve controller adı verilen üç modülden oluşan bir uygulamaya bu şekilde ulaşmış oluyoruz. Özetleyelim:
- ağ hakkında
- yazılım mimarisi hakkında
- HTTP/HTTPS hakkında
- Maven'in temelleri hakkında
- servletler hakkında (basit bir web uygulaması yazmak)
- servlet kapsayıcıları hakkında

MVC'nin Tarihçesi
MVC'nin arkasındaki fikirler, 1970'lerin sonlarında Xerox PARC'ta çalışırken Trygve Reenskaug tarafından formüle edildi. O günlerde bilgisayarlarla çalışmak, bir derece ve sürekli olarak ciltler dolusu belgeleme çalışması gerektiriyordu. Reenskaug tarafından bir grup çok güçlü geliştiriciyle birlikte çözülen görev, sıradan bir kullanıcının bilgisayarla etkileşimini basitleştirmekti. Bir yandan son derece basit ve anlaşılır, diğer yandan bilgisayarları ve karmaşık uygulamaları kontrol etmeyi mümkün kılacak araçlar yaratmak gerekiyordu. Reenskaug, "her yaştan çocuk için" bir dizüstü bilgisayar geliştiren bir ekip üzerinde çalıştı - Alan Kay liderliğinde Dynabook ve SmallTalk dili. Bu, dostane bir arayüz kavramlarının ortaya konduğu zamandı. Pek çok açıdan, Reenskaug ve ekibi tarafından yapılan çalışma, BT alanının gelişimini etkiledi. İşte doğrudan MVC için geçerli olmayan, ancak bu gelişmelerin önemini gösteren ilginç bir gerçek. Alan Kaysöz konusu, "'84'te Apple'a ilk geldiğimde, Mac çoktan piyasadaydı ve Newsweek benimle iletişime geçti ve Mac hakkında ne düşündüğümü sordu. Ben de, 'Mac yeterince iyi olan ilk kişisel bilgisayar' dedim. eleştirilmek.' 2007'de iPhone'u duyurduktan sonra bana getirip verdi ve 'Alan, bu eleştirilecek kadar iyi mi' dedi. Ben de 'Steve, bu boyutu bir tablet kadar yap, dünyaya hükmedeceksin' dedim." 3 yıl sonra, 27 Ocak 2010'da Apple, 9,7 inç diyagonal iPad'i piyasaya sürdü. Başka bir deyişle Steve Jobs, Alan Kay'in tavsiyesine neredeyse tamamen uydu. Reenskaug'un projesi 10 yıl sürdü. Ancak MVC ile ilgili ilk yayın 10 yıl sonra gün yüzüne çıktı. Yazılım mimarisi üzerine birçok kitap ve makalenin yazarı olan Martin Fowler, Smalltalk'ın çalışan bir sürümünü kullanarak MVC üzerinde çalıştığından bahseder. Orijinal kaynaktan MVC hakkında uzun süre bilgi bulunmadığından ve diğer birkaç nedenden dolayı, bu kavramın çok sayıda farklı yorumu ortaya çıktı. Sonuç olarak, birçok kişi MVC'yi bir tasarım modeli olarak kabul eder. Daha az yaygın olarak, MVC'ye bileşik bir model veya karmaşık uygulamalar oluşturmak için birlikte çalışan birkaç modelin bir kombinasyonu denir. Ancak, daha önce de belirtildiği gibi, MVC aslında öncelikle farklı kalıplar kullanılarak çeşitli şekillerde uygulanabilen bir dizi mimari fikir/ilke/yaklaşımdır... Şimdi, MVC konseptinde gömülü olan ana fikirleri ele alacağız. ve diğer birkaç nedenden dolayı, bu kavramın çok sayıda farklı yorumu ortaya çıktı. Sonuç olarak, birçok kişi MVC'yi bir tasarım modeli olarak kabul eder. Daha az yaygın olarak, MVC'ye bileşik bir model veya karmaşık uygulamalar oluşturmak için birlikte çalışan birkaç modelin bir kombinasyonu denir. Ancak, daha önce de belirtildiği gibi, MVC aslında öncelikle farklı kalıplar kullanılarak çeşitli şekillerde uygulanabilen bir dizi mimari fikir/ilke/yaklaşımdır... Şimdi, MVC konseptinde gömülü olan ana fikirleri ele alacağız. ve diğer birkaç nedenden dolayı, bu kavramın çok sayıda farklı yorumu ortaya çıktı. Sonuç olarak, birçok kişi MVC'yi bir tasarım modeli olarak kabul eder. Daha az yaygın olarak, MVC'ye bileşik bir model veya karmaşık uygulamalar oluşturmak için birlikte çalışan birkaç modelin bir kombinasyonu denir. Ancak, daha önce de belirtildiği gibi, MVC aslında öncelikle farklı kalıplar kullanılarak çeşitli şekillerde uygulanabilen bir dizi mimari fikir/ilke/yaklaşımdır... Şimdi, MVC konseptinde gömülü olan ana fikirleri ele alacağız.MVC: Temel fikirler ve ilkeler
- VC, bir kullanıcı arayüzü ile karmaşık bilgi sistemleri oluşturmak için bir dizi mimari fikir ve ilkedir.
- MVC, şu anlama gelen bir kısaltmadır: Model-View-Controller

Adım 1. Uygulamanın iş mantığını kullanıcı arabiriminden ayırın
MVC'nin ana fikri, kullanıcı arayüzü olan herhangi bir uygulamanın 2 modüle ayrılabilmesidir: iş mantığını uygulamaktan sorumlu bir modül ve kullanıcı arayüzü. İlk modül, uygulamanın ana işlevselliğini uygulayacaktır. Bu modül, uygulamanın etki alanı modelinin uygulandığı sistemin çekirdeğidir. MVC paradigmasında bu modül M harfi yani modeldir. İkinci modül, verileri kullanıcıya görüntüleme ve uygulama ile kullanıcı etkileşimini yönetme mantığı da dahil olmak üzere tüm kullanıcı arabirimini uygular. Bu ayrımın temel amacı, sistemin çekirdeğinin (MVC terminolojisindeki "model") bağımsız olarak geliştirilip test edilebilmesini sağlamaktır. Bu ayrımı yaptıktan sonra uygulamanın mimarisi şöyle görünür:
Adım 2 Modeli daha da bağımsız hale getirmek ve kullanıcı arayüzlerini senkronize etmek için gözlemci modelini kullanın
Burada 2 hedefimiz var:- Model için daha fazla bağımsızlık elde edin
- Kullanıcı arayüzlerini senkronize edin
Adım 3 Arayüzü görünüm ve denetleyici olarak ayırın
Uygulamayı modüllere ayırmaya devam ediyoruz, ancak şimdi hiyerarşide daha düşük bir seviyede. Bu adımda, (1. adımda ayrı bir modüle ayırdığımız) kullanıcı arabirimi bir görünüme ve bir denetleyiciye ayrılır. Görünüm ve denetleyici arasında kesin bir çizgi çizmek zordur. Görünüm, kullanıcının gördüğü şeydir ve denetleyici, kullanıcının sistemle etkileşime girmesini sağlayan mekanizmadır dersek, bir çelişkiye işaret edebilirsiniz. Bir web sayfasındaki düğmeler veya bir telefonun ekranındaki sanal klavye gibi kontrol öğeleri temel olarak denetleyicinin bir parçasıdır. Ancak, kullanıcı tarafından görünümün herhangi bir parçası kadar görünürler. Burada gerçekten bahsettiğimiz şey işlevsel ayırmadır. Kullanıcı arayüzünün ana görevi, kullanıcının sistemle etkileşimini kolaylaştırmaktır.- sistem bilgilerinin çıktısını alın ve kullanıcıya uygun şekilde görüntüleyin
- kullanıcı verilerini ve komutlarını girin (sisteme iletin)

- MVC paradigmasının ilkelerine göre, bir sistem modüllere bölünmelidir.
- En önemli ve bağımsız modül model olmalıdır.
- Model, sistemin çekirdeğidir. Kullanıcı arayüzünden bağımsız olarak geliştirilip test edilebilmelidir.
- Bunu başarmak için, bölmenin ilk adımında, sistemi bir modele ve kullanıcı arayüzüne ayırmamız gerekiyor.
- Ardından, gözlemci modelini kullanarak modelin bağımsızlığını destekliyoruz ve kullanıcı arayüzlerini senkronize ediyoruz.
- Üçüncü adım, kullanıcı arayüzünü bir denetleyiciye ve görünüme bölmek.
- Kullanıcı verilerini sisteme almak için gereken her şey denetleyicidedir.
- Kullanıcıya bilgi iletmek için gereken her şey görünümdedir.
Görünümün ve denetleyicinin modelle nasıl etkileşime girdiği hakkında biraz
Kontrolör aracılığıyla bilgi girerek, kullanıcı modeli değiştirir. Veya en azından kullanıcı model verilerini değiştirir. Kullanıcı arabirim öğeleri aracılığıyla (görünüm aracılığıyla) bilgi aldığında, kullanıcı model hakkında bilgi alıyor demektir. Bu nasıl olur? Görünüm ve denetleyici modelle hangi yollarla etkileşime giriyor? Sonuçta, görünümün sınıfları, verileri okumak/yazmak için modelin sınıflarının yöntemlerini doğrudan çağıramaz. Aksi halde modelin bağımsız olduğunu söyleyemeyiz. Model, ne görünümün ne de denetleyicinin erişmesi gereken yakından ilişkili sınıflar kümesidir. Modeli görünüme ve denetleyiciye bağlamak için cephe tasarım modelini uygulamamız gerekir. Modelin cephesi, model ile kullanıcı arayüzü arasındaki katmandır, görünümün uygun biçimde biçimlendirilmiş verileri aldığı ve Denetleyicinin cephede gerekli yöntemleri çağırarak verileri değiştirdiği. Sonunda, her şey şöyle görünür:
GO TO FULL VERSION