MVC: Model View Controller -

7 Cevap php

Ben bir süre için şimdi MVC tasarım hakkında okuma oldum ve Görünüm, nesneleri ve Model yöntemlerini çağırır oluşturur ve bir görünüm verir resmen görünüyor.

Ben bu esas yanlış olduğunu düşünüyorum.

Kontrolör hareket ve Model iç / güncelleme nesneleri almak, uygun bir görünüm seçin ve onu gösterebilir böylece kendisine bilgi aktarmak gerekir. Basit Sadece ham ve rudiementary PHP değişkenleri / deyimleri görünüm içinde görünmelidir eğer.

Görünüm bu modelden görüntülemek için gereken bilgiyi alırsa, kesinlikle görünüm içinde PHP bir sürü olacaktır - tamamen sunum mantığı ayırarak noktasını ihlal.

7 Cevap

Her şeyi programlama ile biz pragmatik olmak gerekiyor. Bir görünümü, yalnızca sunum mantığı içermelidir. Bu mantık çok basit olabilir ya da oldukça karmaşık olabilir. Sürece bu mantık sadece ekranda ne kolları olarak, raporda basılmış, vb

Kontrolör hareket ve Model iç / güncelleme nesneleri almak, uygun bir görünüm seçin ve onu gösterebilir böylece kendisine bilgi aktarmak gerekir.

Eğer geçiyoruz bu bilgi nedir? Muhtemelen bir modelin bir alt kümesidir. Sen görünümü hakkında bilmek ya da sadece model boyunca geçmek ve sadece uygun veri erişim emin olun sadece bilgi içeren yeni bir sınıf oluşturmak olabilir. Neyse, görünümü modele geçti bu bir görünümünü görüntülemek için muktedir sorgulamak için özgür olmalıdır.

Görünümden Eğer denetleyici atlayarak, doğrudan modelini güncellemek mümkün olmalıdır eğer tartışma noktasıdır. Ben doğrudan modelini güncelleyerek emri olabilir durumlar vardır düşünüyorum içeri pragmatik tarafı giriyor. Veri bağlamaları kullanabilirsiniz özellikle. Eğer modelin bir özelliği bir metin kutusu atamak ve güncelleme automagicallylar ne sağlayabilirsiniz. Basit özelliği bir yeri vardır, bu yaklaşımı ayarı denetleyicisi kod bir demet kaydedebilirsiniz. MVC taş koymak kurallar bir dizi değil. Bu doğru kullanıldığında iyi kod üretebilir ama çok titiz bir şekilde kullanıldığı takdirde ağrı ve acı yol açabilir kurallar bulunuyor.

Pragmatik olmak!

MVC yapmak için bir mutlak ve doğru bir yol yoktur. Varyasyonlar mümkündür.

Örneğin, yerine Görünüm aktif Modeli sorgulama sahip, Kontrolör bildirim mekanizması çeşit kullanarak, Model herhangi bir değişiklik görünümü bildirebilirsiniz. Bu durumda, Görünüm sadece o sunulmaktadır güncellemeleri için dinliyor.

Bu bir "saf" MVC dediğimiz muhtemelen değil, ama IMHO sürece görünümü PHP kodu modeli mutasyona etmez gibi büyük bir anlaşma değil. MVC en önemli kural modeli görünümü hakkında bilmiyor olmasıdır. Görünümü modeli hakkında bilmiyor olması daha önemlidir.

Doğrudan modelini kullanarak ana dezavantajı görünümü farklı bir model ile tekrar edilemez olmasıdır. Görünümü hemen hemen her zaman model nesne (veya bir liste bunun) bir türüne özgü olduğu için bu, nadir bir sorundur.

Aşağıdaki modifikasyonlar DisgruntledGoat's code snippet çok "kompleks" olarak kabul edilir? Nesneleri görünümüne geçilmesi gerekmektedir?

<li><?=$item->description?></li>

Ya da belki?

<li><?=$item->getDescription()?></li>

Ben sadece diziler kullanılan çeşitli örneklerini gördüm: -

<li><?=$item['description']?></li>

MVC tabakaları değil, parçalar anlamına gelir. Bu yüzden bir planları daha soyut kavramlar vardır. O (Bilgi aralarında akmaya vardır) tamamen katmanları ayırmak pek mümkün değil, çünkü bu gerçekten diğer bir aşırı ve bürokratik tip sistemlerde spagetti bir süreklilik var. Muhtemelen bir yerlerde bu ikisi arasında bulmak istiyorum.

Ben genellikle kontrolör görüş ayrılığı çok fazla çaba harcamak yok. Modeli ve (kontrolör-view) arasındaki ayrım çok daha önemlidir.

MVC taş koymak bir yasa değildir. Bu konuda okumak yere bağlı olarak farklı olabilir. Şahsen ben Görünüm Model doğrudan okumak için izin vermez.

Update This post has some good examples as well. The model is the engine of the car with start() like methods, the view is the color of the car with paint() or change() methods and the controller is the driver. I prefer to let the controller drive() the car and start() the engine instead of letting the wheels or the paint doing it.

:)

Ben kesinlikle doğru olduğunu düşünüyorum - İzlenme Modelleri yöntemleri aramak gerekir. Diğerleri de söylediğim gibi, orada MVC varyasyonları vardır, ancak nokta çıkışından veri mantığını ayırmak.

Yani genel olarak, uygulama için başlangıç ​​noktası olan bir denetleyicisi var. PHP, bu index.php dosyası olacaktır. En azından bu dosya (sorgu dizesi veya URL parametreleri yani) giriş verileri işlemek istiyorum. Bu app ayrı parçalar için ayrı denetleyicileri eklemek için genellikle iyi bir fikirdir.

Her denetleyici sonra sadece veri görüntülenen gereken ne karar modeli onu alır ve görünümüne geçirir. PHP, değişkenler saklayarak, veritabanından veri alıp çeşitli sınıfları / yöntemlerini çağırır.

Sonra basit çoğunlukla HTML içeren başka bir PHP dosyasını içerir, ancak bazı PHP değişkenleri yankılanan ile. Döngüler, çok ince. Eğer şeylerin bir listesini varsa, böyle bir şey yapmak isteyebilirsiniz:

<ul>
<?php foreach ($items as $item) : ?>
  <li><?=$item?></li>
<?php endforeach; ?>
</ul>