MVC'yi programcı olmayanlara açıklayın [kapalı]


31

MVC'yi programcı olmayanlara açıklamaya ihtiyacım var. Yani, diğer raporların yöneticilerine, ilerleme raporu bağlamında. Yaptığım şeylerden biri, MVC ayrımına yönelik kod tabanımızı yeniden yansıtıyor.

Sorabilirler MVC ayrımı nedir? Neden sorabilecekleri gerekiyor?

Bunun gibi oldukça teknik bir cevabı okuduktan sonra: MVC nedir, gerçekten? Programlayıcı olmayanlarla konuşacağım için tam olarak memnun değilim. Başlarını sallayabilirler ancak muhtemelen ne olduğunu ve neden gerekli olduğunu anlamayacaklardır.

Gerçekte, MVC'nin “yazılımda değişiklik yapma esnekliğini arttırmak için endişelerin, görevlerin, işlevlerin, sınıfların, blokların, görevlerin, şeylerin ayrılmasından” başka bir şey olduğunu tam olarak anlamadım. Veritabanını görünüm ve görünümden iş mantığından DI ve OO araçları ve teknikleri gibi teknikleri kullanarak ayırmak MVC ayrımı olarak düşündüğüm bir şey.

Öyleyse, bir dahaki sefere MVC'yi, örneğin satış ve muhasebede geçmişi olan programcı olmayan birine açıklarsanız, onlara ne söylerdiniz?



12
Bunun "En iyi uygulama" olduğunu ve mutlu olacağını belirtin.
Johan

2
Bunu sadeleştirilmiş terimlerle tanımlamak zorunda kalsaydım, onu endişelerin ayrılmasına odaklanan bir mimari model olarak tanımlardım - bu da ön uç geliştiricilerin ön uç, arka uç geliştiricilerin arka uç ve veri tabanı geliştiricilere odaklanmasına izin verir. Farklı yapılandırılmış bir sistemde olduğu kadar birbirlerini rahatsız etmeden veritabanına odaklanın.
Theodoros Chatzigiannakis

2
Ne olduğunu tam olarak kavramadıysanız, nasıl açıklayacaksınız?
BЈовић

Sanırım, sanayi devriminin değişebilir kısımları ile yapılacak bir analoji olduğunu düşünüyorum ... elbette, endişe etmeden endişelenmeden 1 / 4-20 delik delmenin ve dokunmanın avantajlarını anlayabilirler. cıvata sığacaktır.
J ...

Yanıtlar:


70

MVC'yi açıklamıyorsun.

Yapmanız gereken, bunun kod tabanının yeniden yapılandırılması olduğunu açıklamak.

Kod tabanını basitleştiren ve bu nedenle geliştiricilerin hata raporlarında ve özellik isteklerinde daha az hatayla daha hızlı ve daha iyi değişiklikler yapmalarını sağlayan yeniden yapılandırma.

Teknik detayları, neden yapıldığı, neyin başarıldığı ve işletmenin faydaları hakkında bilgi sahibi olmaları gerekmez.

Başka bir deyişle - dillerini onlarla konuşun.


13
IOW MVC'de yeniden yapılanma ihtiyacını açıklarım (bu harika: dillerini kendileriyle konuş )
Wolf

4
Kod tabanı kaygıların uygun bir şekilde ayrılması durumunda hata düzeltmelerinin ve özellik isteklerinin daha hızlı (daha ucuz) olacağı durumlardan bahsetmek genellikle yararlı olur.
Eric Wilson

14
Bir sonraki atışı yapmanın ve konuşulan dilin $ £ ¥ € ƒруб olduğunu söylemenin verimli olacağını düşünüyorum. Bunu programcı olmayan bir kişiye açıklıyorsanız, muhtemelen bir iş bağlamındadır ve “para nereye gidiyor” olarak düşmesi muhtemeldir?
Joel Etherton

Bildikleri bir şey ile karşılaştırmaya yardımcı olabilir. “Muhasebe topluluğunun oturduğu sözleşmeler gibi, geniş çapta benimsemiş olan örgütsel ilkeleri karşılayacak şekilde yeniden yapılandırıyoruz.”
Nathan

41

Rütbesini onaylarken Oded'in cevabını , teknik projeleri işletme yöneticilerine "kendi dillerinde" açıklamanız gerekir, "teknik ayrıntıları bilmelerine gerek kalmadan, neden yapıldığını" demediim.

Bölüm başkanları ile bir proje veya yatırım incelemesi toplantısındaysanız ve "ne yaptığımızı" açıklarlarsa "Umm ... neden?" Diye sormak isteyebilirler. Bu büyük bir zaman ve enerji yatırımı gibi görünüyor. Bize ne yaptığınızı ve nedenini biraz daha anlatabilir misiniz? " Bu son derece makul bir soru gibi görünüyor. "Şey ... bu karmaşık" bir pozisyonda yakalanmak istemezsin. veya "Hayır, gerçekten açıklayamam." ya da "Endişelenme." Proje incelemesi yaptığınız personel ne kadar kıdemli olursa, "sadece iyi açıklayamayacağım şeyler" sine izin verme ihtimalleri o kadar düşüktür. Daha iyi, başkalarının kendilerini rahat hissetmelerini sağlamak için en az bir seviyeye inebilirseniz 1) ne olduğunuzu bilir

Öyleyse kalça cebinizde MVC'nin bir taslağını hazırlayın Gibi bir şey:

“Biraz teknik ama… MVC kodu Modellere (temel verilerden ve iş mantığından sorumlu), Görünümlere (verileri gösteren) ve Denetleyicilere (kullanıcı etkileşimlerini ve güncellemelerini idare eden) ayırır. - Şaşırtıcı bir şekilde yazılım mühendisliğinin en başarılı "tasarım deseni". "Sadece bir su tesisatı" gibi görünebileceğini biliyorum ama gelen tüm talepleri yerine getirmek için daha güçlü bir temele ihtiyacımız var. özellikleri ve hataları daha hızlı çözer. "

Sonunda MVC'yi tam olarak anlayamasalar bile ve anlaşılır hale getirmek için fazla basitleştirmek zorunda kalsanız bile ("omlet yapmak için bazı yumurtaları kırın"), daha iyi bulacağınıza bahse girerim Üst düzey yöneticilere "açıklayamam" veya "anlamaya yetkin değilsin" demekten daha fazla açıklamaya hazır olun.


4
So, have a sketch of MVC in your hip pocket, ready to go.- ya da belki bir pp Sunum ;-) kullanıcı "dilini" olarak?
Kurt

Ben "modeller temel verilerden ve iş mantığından sorumludur" demem. İş mantığı en iyi kendi katmanında ayrı tutulur. Aslında, modeller bu iki katmanı ayırmak için denetleyiciden görünüme aktarılan veri koleksiyonlarıdır. Örneğin, neredeyse hiçbir zaman tek bir ORM nesnesini bir görünüme değil, bir dizi kümeye ve bazı diğer çeşitli verilere geçiremezsiniz. Daha uzun bir açıklama için cevabımı gör.
Tobia,

2
@ Tobia Sadece Microsoft'un Model dediği şey. "" Modeli, kullanıcının etkileşime girdiği sistemin sunum-agnostik bilgisayar modelidir, hemen hemen her şey görünümün ve denetleyicinin bir parçası olmayan her şeydir.
Doval,

@Doval Microsoft'un yorumu olabilir, ancak bu MVC'nin genelliğinin bir kısıtlamasıdır. Ne demek istediğimi görmek için Ruby on Rails, Django veya Grails gibi çevik MVC çerçevelerine bakın. Bu yaygın yanlış anlama konusunu ele almak için cevabımı daha da genişlettim.
Tobia,

3
Orijinal Smalltalk MVC modelinde, ekrandaki her kontrol kendi modeline, görünümüne ve kontrol cihazına sahipti. Herkesin kabul ettiği tek bir MVC tanımı varmış gibi davranmayalım. Neyse ki, o sadece ne olduğunu açıklamak gerekir diye yapıyor.
RemcoGerlich

9

Yazılımda değişiklik yapma esnekliğini artırmak için

Yöneticiler sonuçla ilgileniyorlar. Ne kadar az teknik olursa oraya nasıl gideceğinizle ilgili endişeleri o kadar azdır. MVC çok yaygın, popüler ve kanıtlanmış.

Gelecekte değişiklik talepleri yapıldığında, yönetime daha kolay ve daha hızlı yapılabileceklerini bildirebilirsiniz. Herkes bunu duymayı sever.

Bu ortak bir stratejidir, bu nedenle yeni geliştiricilerin işe alınması bir sorun yaratmamalıdır. Aslında, güçlü taraftar olan daha iyi geliştiriciler çekebilirsiniz.

Bu projede birçok acil sorun varsa, bunların hepsi çok zor olacak. Bir adım geri atmak istemeyebilirler, böylece iki adım öne geçebilirsiniz. Çözeltide küçük parçalar halinde beklemek veya uygulamak olabilir.


9
  • Model - Teller / elektrik
  • Görüş - Işık Fikstürü
  • Denetleyici - Işık Anahtarı

Bileşenleri kapatmak oldukça kolaydır (lamba armatürü, lamba anahtarı / kısıcı). Belki çok fazla kablolama olmasa da, diğer bileşenleri etkilemeden de yapılabilir. Herkes bunun başında pazarlama / satış türlerini bile görebilmelidir. (Temizle, ayırma, vb.)

Patronunuza / iş arkadaşlarınıza, uygulama / sistemimizde anahtarın aydınlatma armatürünün içine yerleştirildiğini ve aydınlatma armatürünün bakır telin etrafına dolandığını söyleyin. Şimdi ışık fikstürünü, anahtarını veya telini güncellemeye çalıştığınızı hayal edin. Çok pahalı, diğer bileşenlere etkisi çok yüksek ve belki de başka bir şeyi bozmadan yapmak tehlikeli.

MVC, karmakarışık (ancak çalışan) karmaşayı değişikliklerin daha az hatayla daha hızlı ve daha kolay olabileceği bir şeye dönüştüren kod tabanına bir desen uyguluyor.


Hmmm ... bu analoji gerçekten IMHO'yu “anlayamadı”.
DevSolar

Ancak bir çeşit benzetme sağlama konusundaki tüm fikir bu. Benzer bir şey yazabilirdim. Genellikle araba ya da para içeren bir şey oldukça iyi çalışır ... :-)
JensG

Gerçekten, kaldırılması gereken insanlar programcı olmayanlardır. Bence sitenin çoğu kullanıcısı programcı! :)
Jon Raynor

3

Kolay bir şekilde anlaşılması MVC: modeli verileri , görüntüleme ekranında pencere ve kontrol ikisi arasında bir yapıştırıcıdır .

Şimdiye kadarki en iyi değerlendirme listesi: "SMART Modellere, THIN Denetleyicilere ve DUMB Görünümlerine ihtiyacımız var"

Diğer yazılım tasarım modellerinde olduğu gibi, MVC her bir sistem için uyarlanmasına izin verirken bir soruna " çözümün özünü " ifade eder . Belirli bir uygulama yerine bir kavram olarak görülmesi daha iyidir. Konseptin birçok uygulaması var.

Tüm MVC varyantları aynı bileşen bölümünü kullanır, ancak genellikle bu bileşenlerin nasıl etkileşimde bulundukları konusunda farklılık gösterirler.

görüntü tanımını buraya girin

Farkında olmayanlarınız için, MVC ilk olarak 1979'da Trytalve Reenskaug tarafından Smalltalk ile kullanılmak üzere bir tasarım deseni olarak tanımlandı . "Smalltalk-80'de Uygulamalar Programlama: Model-View-Controller'ın Kullanımı" başlığı altında makalesi yayınlandı ve gelecekteki MVC uygulamalarının temelini attı.


3

Oded ile yarı yolda hemfikirim - teknik olmayan akranlarınızı ve yöneticilerinizi, yaptığınız işin önemli ve yararlı olduğuna, cesaret detaylarını açıklamadan, geliştirmenin akıllıca bir beceri olduğuna nasıl ikna edeceğinizi öğrenmek.

Ancak, karmaşık kavramları basit terimlerle açıklama yeteneğine sahip olmanın aslında bununla yardımcı olduğuna inanıyorum - teknik olmayan yöneticilerin sık sık sahip olduğu bir sorun, teknoloji uzmanlarının ne yaptığını tam olarak anlamada zorluk çektikleri için, onlara güvensizlik. Bu sadece insan doğası: anlamadığınız bir şeyin inancınızı koymaktan daha yararsız veya yanlış olduğuna inanmak daha kolaydır. İrade anlaşılması kolay kavramları yapabilirsiniz nedenle, sen bunu, ve zaman içinde ihtiyaç olduğunda, sizin teknik olmayan yöneticileri öğreneceksiniz onu kullanabilirsiniz edebilirsiniz baştan birini çekerek değildir - bunlar istiyorsanız bunu anlamak Onlara - sadece kendi akıl sağlığı için detayları saklıyorsunuz. Sana daha çok güvenecekler.

Bu bir yana, hadi soruyu cevaplayalım:

İş adamlarının anladığı analojileri kullanmayı faydalı buluyorum. MVC için bir işletme olarak tanımlarım.

  • Modeller iş mantığı ve verilerinden sorumludur - bunlar programın ne yaptığını ve nasıl yapıldığının ayrıntılarını tanımlayan şeylerdir. Program bir işletme olsaydı, modeller depolar, fabrikalar, işçiler ve sermaye ekipmanı olurdu. Ayrıca kurallara uyulduğundan ve politikaların uygulandığından emin olan alt düzey yöneticiler olacaktır.
  • Görünümler sunum katmanıdır - sistemde neler olup bittiğini kullanıcılara gösterir ve programla etkileşimde bulunmalarını sağlar. Eğer programımız bir şirket olsaydı, görünümler showroom katı, ticaret konvansiyonundaki satış standı ya da satış temsilcileri gibi olurdu. Seçenekleri gösterirler, kullanıcı dostu bilgi ve geri bildirim sağlarlar ve şirkete geri talepte bulunurlar.
  • Kontrolörler koordinasyon katmanıdır - bilginin modellerden görüşlere ve tam tersine ulaşmasını ve her şeyin işini yapmak için birlikte çalışmasını sağlar. Program bir şirket olsaydı, kontrolörler orta ve üst düzey yönetim olurdu. Ayrıntılara fazla dahil olmuyorlar, ancak doğru kişilerin işlerini yapmak için doğru araçlara sahip olduklarından emin oluyorlar ve üst düzey kararları onaylıyor veya reddediyorlar. İşlerin birlikte çalışabilmesi için genel yönü sağlarlar.

Bu analoji ile açıklamanın faydası, iyi bir yöneticinin endişeleri bu şekilde ayırmada bilgeliği göreceği ve daha denetleyici benzeri olmaları gerektiğine ve gelecekteki ayrıntılara fazla girmemeleri gerektiğine karar vermesi!

Bu umarım "neyi" - "niçin" cevabı bu analoji ile de kolaydır:

Her bir departmanın bir dizi görevden sorumlu olduğu ve başkalarının ne yaptığından endişe etmeden her zaman ihtiyacı olan kaynaklara sahip olacağını bildiği ideal bir şirket düşünün. Bir satış temsilcisi, müşteriyi bulur, siparişini alır, onaylayan yönetime geri gönderir ve sonra yerine getirilmesi için depoya / üretim / mühendisliğe gider. Geri bildirim doğrudandır - bir sorun olmadığı sürece kimsenin dahil olması gerekmez. Bu iyi bir MVC tasarımı - her parçanın bir işi var ve diğer parçalar hakkında endişelenmenize gerek yok. Bu şekilde, ihtiyacımız olursa değiştirmek kolaydır. MVC olmayan bir tasarımda, sorumluluklar açık değildir. Satış temsilcisi, müşteri farklı bir şey istediğinde ürünü değiştirmeyi deneyebilir. Veya o gün nasıl hissettiğine bağlı olarak farklı fiyatlar verebilirler. CEO, daha güvenilir bir tedarik zincirinin nasıl kurulacağı konusunda endişelenmesi gerektiğinde, üretim hattını karıştırırken fabrika katında olabilir. Depo işçileri, daha önce alınmış olan siparişleri yerine getirmeleri gerektiğinde müşterilerle konuşurken satış katında olabilir.

Başka bir deyişle, iyi MVC tasarımı, her bir parçanın tek bir şeye odaklanmasına izin verir, böylece doğru bir şekilde yapabilir - tıpkı iyi organize edilmiş bir şirket gibi.

** Sorumluluk reddi - Şirketiniz iyi organize edilmemişse, bundan rahatsız olabilirler. Bu durumda, başka bir analojiye ihtiyacınız olacak. Farklı bir işe de ihtiyacınız olabilir.


OP'nin şirketi iyi örgütlenmemişse, ona genel ekonomik ilerlemenin çizgileri boyunca "iş bölümü" hakkında konuşmasını öneririm, örneğin avcılar / toplayıcılar yazılım geliştiricileri gibi uzman işçilere
dönüşürler

İyi tanım - mükemmel feragatname.
citizenkong

2

MVC'nin faydaları öncelikle endişelerin ayrılmasındadır:

İnsanların en iyi yaptıkları şeylere konsantre olmalarını sağlar.

Database admins develop the model
Programmers write the controllers
and Graphic designers can design the views.

Masrafları azaltır çünkü iç içe geçmiş sistemler personelin tüm bu alanlarda uzman olmasını gerektirir veya bir alandaki bir değişiklik diğerlerini etkilediğinde daha fazla sorun yaşarsınız.

MVC mimarilerinin gerçek hayattan örneklerini verin: Cep Telefonları, Masaüstü Telefonlar, Skype, vb. Görünümü Değiştirme (çevirme tuşunun tipi, hoparlörler, mikrofonlar) modeli etkilemez (ses sinyali), kontrol cihazı devrededir ses dalgalarını ses sinyallerine çeviren telefon.


4
MVC'nin Modelini veri tabanı ile eşitlemem ya da kullanıcı girişi ile MVC'nin Denetleyicisini eşitlemem.
Tobia,

1
@Tobia Evet, ama bunun nüansları teknik olmayan bir insanda kaybedilecekti. Bu noktaya gelir
B2K

@ Tobia, bu konuyu tekrar ziyaret ederek açıklamayı daha doğru şekilde ayarladı. Yorumlarınız için teşekkürler.
B2K

1

Onlara MVC'nin endişelerimi ayırdığını söylerdim.

İlk endişem kod mantığı - web sitesinin istedikleri eylemleri gerçekleştirmesini sağlamak için sahne arkasında ne yapıyorum.

İkinci kaygım iş mantığı - onlar (kullanıcı) uygulamanın ne yapmasını istiyor.

Üçüncü kaygım, sitenin nasıl göründüğü - İstediklerini yapmak için ziyaret ettikleri sayfa.

(Onlara bundan sonraki kısmı söylememeliyim) Yani, sırayla, açıklamalarım Model, Denetleyici ve Görünüm içindi.


1

Avantajları açıkla

MVC'yi ticari faydalar açısından açıklardım. Yöneticileriniz bunu anlayabilecek ve avantajların ikna edici olması durumunda devreye girecektir.

MVC, uygulamanızı, her biri diğerlerinden bağımsız olarak bulunan, mantıklı birimlere ayırmanıza izin verir. Sistemler arasında temiz, bakımı yapılabilir, test edilebilir kod ve potansiyel olarak kod yeniden kullanımı elde edersiniz.

Model

Her model, ilgili tüm işletme mantığı ile birlikte bir müşteri kaydını veya bir ürünü, örneğin tek bir işletme bilgisini kapsar.

Bunu ayırmak, iş mantığınızı uygulamanızın diğer bölümlerinden ayrı olarak kolayca test etmenizi sağlar.

Ayrıca ek modeller ekleyerek uygulamayı kolayca genişletebilirsiniz, çok modüler ve temizdir.

Teoride her model diğerlerinden bağımsız olarak var olabilir. Bunu, modeller arasındaki ilişkileri ele almak için servis nesneleri kullanarak zorlamayı düşünebilirsiniz. Sistemin geri kalanını etkilemeden modelleri değiştirebilirsiniz.

Görünüm

Görünümünüzü ayırmak, arka ucunu kırmadan, ön ucunuzu kolayca güncellemenizi sağlar.

Ön uç kodunuzu, tüm sisteme erişmelerine gerek kalmadan başka bir geliştiriciye verebilirsiniz.

Ayrıca mevcut sistemle çalışan alternatif ön uçlar oluşturmakta özgürsünüz. Verilerinizi bir mobil uygulama veya bir API veya bir PDF veya bir Excel elektronik tablosu olarak gösterebilirsiniz. Bunu sistemin geri kalanına girmeden yapabilirsiniz. Yanlışlıkla işleri kırmanız daha az olasıdır. Bağlanmanız için mevcut sistemler için kolayca entegrasyon noktaları oluşturabilirsiniz.

Kontrol eden, denetleyici

Denetleyici modelleri görünüme kablolar. Her şeyi ayrı tutuyor. Kolayca farklı bir görünümde kablolama yapabilirsiniz. Model kodunuzu değiştirirseniz, görünümün bilmesi bile gerekmez.

Diğer Avantajlar

Bu yaygın bir düzen. Diğer geliştiriciler kodunuzu anlayabilir ve üzerinde çalışabilir. Kodunuza yıllar sonra dönerseniz, büyük olasılıkla onu anlayabilecek ve değişiklik yapabileceksiniz. Kodunuzun gelecekteki bir geliştirici için başka bir eski baş ağrısı olma olasılığı daha düşük olacaktır.

Her şeyin bir yeri olduğundan, temiz kod üretmek çok kolaydır. Spaghettifikasyon riski çarpıcı bir şekilde azalır (yok edilmekle birlikte). Kodunuz korunabilir hale gelir.

Her şey modüler olduğundan, bölümlerini yalıtımlı olarak test edebilirsiniz. Kodunuz test edilebilir ve hataları veya güvenlik açıklarını barındırması daha az olasıdır. Gelecekteki yükseltmeler tüm sistemi kolayca test edebildiğiniz için çok daha kolay olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.