Model-View-Controller (MVC) modeli, modern web geliştirmedeki en yaygın olarak kabul edilen mimari tasarımlardan biridir.Bu, MVC veya yakın türevlere uygulama yaparak kod düzenlemenin yapısal bir yolu sunar: Mastering MVC, görünüş ve kontrol edilebilirlik, geliştiricilerin istihdam edilebilirliği, sürdürülebilirlik ve işbirliğine olanak sağlar. Bu makale MVC modeline, Django, Rails'in temellerini ve ASP.NET MVC'ye çok güvenmektedir.

MVC Desen Nedir?

MVC, bir uygulamanın üç ayrı parçaya bölünmesinin bir yazılım mimarisi modelidir, her biri belirli bir sorumluluğu etkilemez. Hedef, verilerin iç gösterimini (model) kullanıcılarına (görünüme) ve kullanıcının uygulama ile nasıl etkileşim kurduğundan (görücü) daha uzun süre değiştirmektir.

Üç bileşen şunlardır:

  • [[Dönetici:0) Model:[Dönetici:0) Model, kullanıcının arayüzünden ve uygulamanın temel mantığını yönetir.Verilerin veri tabanlarından geri almak, hesaplamaları gerçekleştirmek, doğrulamayı sağlamak ve diğer bileşenleri bildirmekten sorumludur.
  • [FONT:0)View: [DÜDÜDÜDÜT:1] Uygulama, kullanıcının arayüzünü her zaman yansıttığı zaman modeli ve güncellemelerini bir formata uygun olarak gösterir.
  • [FONT:0)Denetler:[Döneticiler:[Döneticiler:[Döneticiler:[Döneticiler:[Döneticiler: 0) Kontroller, uygulamanın akışını kontrol mantığını içeren bir aracı olarak hareket eder.

Bu endişelerin ayrılması, geliştiricilerin uygulamanın farklı bölümlerinde bağımsız olarak çalışmasını sağlar. Örneğin, bir ön uç geliştirici veritabanı şemasını anlamadan, arka uç geliştirici, kullanıcı arayüzünü etkilemeden model mantığı değiştirebilirken, bu paralellik takım temelli bir gelişmede önemli bir avantajdır.

Tarihsel Kökenler ve Evrim

MVC modeli ilk olarak 1979 yılında Trygve Reenskaug tarafından tarif edildi, ilk olarak Xerox PARC'de Küçüktalk programlama dili üzerinde çalışırken, MVC, masaüstü grafik kullanıcı arayüzleri için tasarlanmıştır (GUIs), bir görüntünün kullanıcı girişi nerede olacağını ve bir modelin alt temel verileri ele alacağını belirtti.

Web gelişiminin ilk günlerinde, uygulamalar karışık veritabanı sorguları, iş mantığı ve sunum kodu tek dosyalara (örneğin spaghetti kodu) sunmak için yapılan bakım zor ve cesareti test. Bugün, MVC ve varyant çerçeveleri (PVVM, ve Model-View-View-View-View-View-View-Fort gibi) birçok modern çerçevenin geri dönüşüdür.

Daha derin bir tarihsel perspektif için, orijinal MVC deseni hakkında okuyabilirsiniz:0)Wikipedia).

MVC'yi Kullanımının Faydaları

MVC modelini kabul etmek, herhangi bir büyüklükteki web geliştirme projeleri için birkaç somut avantaj sunar.

Endişelerin Ayrılığı

Her bir bileşen tek, iyi tanımlanmış bir sorumluluğu vardır. Modeller veri mantığı, görüşler sunumu ve kontrolörler uygulama akışını idare eder.Bu ayrılık, her parçayı izolasyonda anlamayı, değiştirmeyi ve test etmeyi kolaylaştırır.Bir hata göründüğünde, geliştiriciler hızla katmanı sorumlu bulabilir ve istenmeyen yan etkiler olmadan düzeltebilir.

Scalability

Çünkü kod modülerdir, yeni özellikler eklemek genellikle mevcut bileşenleri yeniden yazmanız gerekmez. Yeni kullanıcı etkileşimleri veya farklı veriler için yeni kontroller tanıtabilirsiniz, mevcut görüşleri yeniden kullanarak.Bu modülerlik hem uygulamanın işlevselliğini hem de geliştirme ekibini destekler.

Reusability

Modeller ve görüşler genellikle bir uygulamanın farklı bölgelerinde veya hatta farklı projelerde yeniden kullanılabilir. Örneğin, bir Kullanıcıyı temsil eden bir model kimlik doğrulama, profil ve yönetici özellikleri tarafından kullanılabilir. Benzer şekilde, bir ürün kartı gibi bir görünüm bileşeni farklı verilerle birden çok yerde yapılabilir.

Paralel Kalkınma

Takımlar model, görüş ve kontrolcüler, diğer her bir koda adım atmadan çalışabilirler.Bir ön uç geliştirici model ve kontrol mantığı yazarken, arayüzlere (örneğin, bu paralellik döngülerini beklediğine dair aynı zamanda).

Test edilebilirlik

Çünkü bileşenler gevşek bir şekilde çiftleştirilir, her biri bağımsız olarak test edilebilir. Bir web sunucusu olmadan model yöntemlerini test edebilirsiniz, alaylı modeller ile test kontrol edici eylemleri test edebilir ve daha yüksek kod kalitesi ve daha az regresyonlara yol açar.

MVC Uygulamada Nasıl Çalışıyor

MVC'nin gerçek bir web uygulamasında nasıl çalıştığını anlamak için, bitirmeye başlamak için tipik bir kullanıcı isteğinin izlerini takip edelim. Bir kullanıcının ID 42 ile bir makaleyi görüntülemek için bir bağlantı tıkladığı basit bir blog uygulaması düşünün.

  1. Kullanıcı bağlantıyı tıklar ([[D:0) ve tarayıcı sunucuya HTTP GET isteği gönderir.
  2. Sunucunun routing mekanizması URL'yi belirli bir kontrol edici eyleme haritalar (örneğin, ESFLT:1).
  3. Kontrollünin:2) yöntemi, istek alır ve ID'yi (42) URL parametrelerinden çıkarır.
  4. Kontrol, model üzerinde bir yöntem (örneğin, ESFLT:3) veritabanından verileri almak için çağırır.
  5. Model bir veritabanı sorgusunu uygular, kaydı getirir ve bir veri nesne döndürür (örneğin, [[ÜcretsizlikT:4) sınıfı örneği.
  6. Kontrol veri nesnesini alır ve onu görüşe geçer (örneğin, bir şablon dosyası).
  7. Bakış verileri alır ve HTML'yi verir, makale unvanı, vücut ve diğer alanları uygun yerlere enjekte eder.
  8. Kontrol, HTML'nin kullanıcı tarayıcıya HTTP yanıtı olarak geri gönderdiğini gönderir.
  9. Tarayıcı sayfayı gösterir.

Bu akış, verileri değiştirmek için tipiktir.For actions that changing data (e.g., yeni bir makale oluşturmak), kontrol cihazı kullanıcı girişini doğrular, verileri kurtarmak veya güncellemek için modelle etkileşime girer ve sonra kullanıcıyı farklı bir sayfaya yönlendirir (örneğin, HTTP yönlendirme yanıtını göndererek).

MVC'nin Ortak Variations of MVC

Yıllar boyunca, geliştiriciler MVC'yi farklı ortamlara ve programlama paradigmalarına uymaya adapte oldular. Bu varyasyonları çeşitli çerçevelerle çalışırken yardımcı olur.

Model-View-Controller Web Frameworks

Çoğu web çerçevesi MVC'nin bir kopyasını uygulamaktadır ve Django'nun Model-View-Template (MVT) modeli, aslında farklı bir isim sözleşmesiyle MVC'dir: Django'nun terminolojisinde genellikle bir “görüşme” olarak adlandırılır ve bu çerçevede karışıklıklara neden olabilir. Django'nun Model-View-Template (MVT) modeli, aslında MVC'nin farklı bir isim sözleşmesiyle ilgilidir: Django şablonu “görüler”, kontrole karşılık gelir.

Model-View-View Model (MVVM)

Angular, Vue ve Knockout gibi ön uç çerçevelerde kullanılır, MVVM, görüntü ve model arasında oturan bir “görücü modeli” ile kontrol edilebilir. görünüm modeli, genellikle reaktif programlamayı kullanarak iletişim kurar.

Model-View-Adapter (MVA)

Ayrıca “observer” modeli olarak da bilinir, MVA bazı masaüstü çerçevelerde kullanılır. adaptör, doğrudan darbe olmadan iletişim kurmanızı sağlayan bir aracı olarak hareket eder. Bu model web gelişiminde daha az yaygındır, ancak bazı karmaşık UI sistemlerinde görünür.

Her varyasyonun güçlü yönleri vardır, ancak temel fikir aynı kalır: Bağlanmaları azaltmak ve korumayı geliştirmek için ayrı sorumluluklar.

MVC örnekleri

MVC'yi pratikte ne kadar popüler çerçeveler uygularız.

Laravel (PHP)

Laravel, [[0|[Döneticiler:0) Model)[değiştir | kaynağı değiştir].Bir veritabanı masasını temsil eder ve sorgulama, ilişkiler ve erişimciler için yöntemler içerir. [FONTD:2).Denetmenler) Cihazın yönlendirme yöntemleri ile PHP sınıfıdır.

Django (Python)

Django Model-View-Template (MVT) modelini takip eder.TheurFLT:0) Model) HTTP isteği olan bir Python sınıfıdır ve veritabanı şemasını ve iş mantığını tanımlar.[DDDDDD:2).[Döneticileri ile karşılaştırıldığında HTMLD][/FONT FONT FONT FONT I FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT FONT=SNT=SNT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=

MVC Hakkında Ortak Yanlışlar

Yaygın kullanımına rağmen, MVC genellikle yanlış anlaşılır veya yanlış anlaşılır. İşte onların arkasındaki birkaç yaygın yanlış ve gerçeklik.

[FONT:0)Misconception 1: MVC sadece web uygulamaları içindir.[
) MVC web gelişiminde son derece popüler olsa da, masaüstü GUI programlamasında ortaya çıktı ve verileri ayrıştıran herhangi bir uygulamada kullanılabilir. Mobile uygulamaları, masaüstü uygulamaları ve hatta bazı komut satırı araçları MVC veya bazı komut satırı araçlarını uygulamaktadır.

[FONT:0)Misconception 2: Bu görüş, kullanıcının rolüne göre nasıl görüntülenmeli; cihaz veya diğer bağlamda Zengin şablon dilleri, döngülere, koşullu fonksiyonlara ve yardımcı fonksiyonlara izin verir.

[FONT:0)Misconception 3: Kontrol isteğe bağlı veya minimum.[
) Bazı geliştiriciler tüm mantığı kullanıcı ve sistem arasındaki etkileşimi (örneğin “sor modeli, deri kontrolörü” yaklaşımı) veya görüşe sokmaya çalışır.

[FONT:0)Misconception 4: MVC belirli dosya yapısını gerektirir.[DÜT:1]
) klasörü veya isim dosyalarını organize etmenin bir yolu yoktur. Farklı çerçeveler farklı sözleşmeler uygular, ancak kavramsal ayrımlar, farklı yönetmenler ve kontrolörler ayrı yönetmenler halinde yaşar veya gruplandırılabilir.

MVC'yi Uygulamak için En İyi Uygulamalar

MVC'nin en çok ortaya çıkması için, geliştirici topluluğunda yıllarca deneyimden elde edilen bu en iyi uygulamaları takip edin.

Model “Fat”ı tut ama Focused

Model, temsil ettiği verilere ilişkin tüm iş mantığı içermelidir. Bu, geçerlilik kuralları, ilişkiler, hesaplanmış özellikler ve hatta bazı veri dönüşümleri içerir. Ancak, sunum mantığı veya HTTP'nin özel kod (örneğin, kullanım isteği nesneler) modelde yer alan bir kuraldır: kod ile kod anlaşmaları varsa, “en fazla 10 etikete sahiptir”), bu kavramın nasıl şekillendirildiğine dair anlaşmalara aittir.

Kontrolücü “Skinny” tutun

Kontrol sadece akışı orkestraya sokmalıdır. İstekten giriş okumak, uygun model yöntemleri aramak ve bir yanıt vermek. Kontrollü mantık, veritabanı sorguları veya kontroldeki karmaşık iş kurallarının eklenmesinden kaçının.Eğer kontrol yönteminizi 15-20 satır kod üzerinden bulmak için, mantıkla modellemek için dikkate alın.

Kompleks Görüntüleme için Modelleri veya Hediyeleri Kullanın

Bir görüş birden fazla modelden veri bir araya getirmeli veya önemli bir formatlama gerçekleştirirken, özel bir görüntü modeli veya mevcut sınıf oluşturun. Bu nesne tam olarak şablon ihtiyaçlarını hazırlar, şablonları temiz tutar ve kontrol basitleştirir. Bu uygulama ASP.NET MVC ve PHP çerçevelerinde Laravel gibi paketler üzerinde yaygındır.

Taklit Enjeksiyonu

Modern MVC çerçeveleri, bağımlılık enjeksiyonunu destekler, bu da kontrol cihazları ve modellerin güvenilirliklerini (örneğin, test için veri tabanı ve giriş hizmetleri) doğrudan oluşturmadan elde etmenizi sağlar. Örneğin, modeli doğrudan kullanmak yerine bir repository arayüzünü uygulayın, böylece test için gerçek bir veritabanı ve bir in-memory mağazası arasında geçiş yapabilirsiniz.

Single Sorumluluk Prensibini Takip Edin

Her sınıf, MVC'de değişiklik için bir nedene sahip olmalıdır: Bu ilke ayrımı güçlendiriyor: veri kuralları değiştiğinde model değişiklikleri, UI düzeni değişiklikleri ve uygulama akışı değişiklikleri olduğunda kontrol değişiklikleri.Bu ilkeye sadık kalın ve tabakaların arasındaki sorumlulukları yaymaya karşı koy.

MVC'yi kullanmamak için ne zaman

MVC güçlü bir model olsa da, aşağıdaki senaryolarda alternatifler göz önünde bulundurmak en iyi seçenek değildir:

  • [FONT:0]Very basit uygulamalar[[[Dönetici: 1] sadece birkaç sayfa ve minimum mantık tam MVC yapısının üst kısmından faydalanamaz. Basit bir senaryo veya tek bir dosya yaklaşımı inşa etmek ve korumak için daha hızlı olabilir.
  • [FONT:0) Gerçek zamanlı, etkinlik odaklı sistemler (e.g., sohbet uygulamaları, canlı panjurlar) genellikle gözlemci model veya aktör modeli gibi reaktif desenlerden faydalanır, devlet değişiklikleri merkezi bir kontrol olmadan otomatik olarak ortaya koyar.
  • [FONT:0]Milya Mimarlıkları[[Döneticiler) bazen MVC modellerini servis seviyesinde kırabilir. Her mikro hizmet kendi verilerini ve mantığını idare edebilir, ancak hizmet içi iletişim modelleme sınırlarına uygun olmayabilir.
  • [FONT=0) Tam enstack JavaScript uygulamaları[[Dönetici 1], müşterinin dışlamaları genellikle Flux veya Redux gibi desenleri benimsemektedir ve geleneksel MVC'den daha merkezileştirilmiş ve tek yönlüdür.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

MVC modeli, zaman testini dikkate aldı, çünkü her bileşeninin yazılım mühendisliğinde temel bir meydan okumayı ele alıyor: MVT veya MVVM gibi karmaşıklıkları nasıl yöneteceğinizi, çoğu modern çerçevelerle etkili bir şekilde çalışmanızı sağlar.Yeni bir proje veya yeniden faktörlemeye başlayabilirsiniz, MVC, daha temiz bir kod atayabilir ve MVC'yi kucaklayabilir ve uygulamanız için nasıl değişiklikler uygulayacaktır.