MVC uzak Breaking

5 Cevap php

Son zamanlarda / uzak web geliştirme için standart MVC kurulum hareket üzerine ben geliştirmeye çalışıyorum, ve ben StackOverflow benim fikirler atmak için zaman olduğunu düşündüm.

Bir bootstrapper ilk nesne oluşturur, en genel akım aynıdır. Aradaki fark, bu daha sonra bir Sevice tutulur olmasıdır.

Yerine denetleyici sevk Sonra, bu görünümü yükler.

Görünümü daha sonra komutlar ve sorgular çağırır. Komutları genellikle formla ilgili (genellikle, veritabanı satır güncellenmesi) işlevselliği temsil eder ve sorgular normalde ModelPeers ne olacağını vardır. Bu (Sevice yoluyla) oluşturulduğu zaman, onlar potansiyel karmaşık bağımlılık enjeksiyon bir çok ihtiyaç kurtulur onlara geçti ServiceManager var.

Modeller kendilerini sadece tek bir satırda / silmek / güncelleme oluşturmak yapardı.

Yani bir görünüm gibi görünecektir:

ListUsers.php

<?php $users = $this->ServiceManager->get('Query\User')->getNewestUsers(10); ?>

<?php foreach($users as $user): ?>
....
<?php endforeach; ?>

UpdateUser.php

<?php $this->ServiceManager->get('Command\User')->update(); ?>

<form>...</form>

Biraz katmanlı ihlal olduğunu biliyorum, ama daha fazla bir şey ViewVariableSetters gibi hareket kontrolörler bir grup olan çok daha temiz görünüyor.

Tüm işlevselliği Komutanlıkları ve sorgular ve uzak büyük denetleyicileri içine kapsüllü olduğu için o da her şey çok daha test edilebilir hale getirir. Teknik olarak, bir denetleyici ya da ViewVariableSetter olabilir, ama çok az parası ile çok daha fazla kod eklemek istiyorum gibi görünüyor.

Herhangi bir görüş takdir, ve ben bir şey açıklamak eğer bana bildirin lütfen olacaktır.

5 Cevap

Proje büyük ve daha büyük gittiğinde sizin projeniz için başka bir geliştirici eklemek ve bir kez that az fayda hissedeceksiniz. Sen denetleyicisi ve model görünümü ayrılan müteşekkir olacağım.

Eğer MVC beğenmezseniz, siz (Model-View-Presenter), PM (Presentation Model) ve MVVM onun kardeşleri de MVP bakmak olabilir (Model-View-ViewModel).

Aslında, size PM olabilir ne tarif, emin değilim.

Bir iyi bir başlangıç: yeniden / modüler kod from, bir denetleyici yerine Giganto yekpare denetleyici çağrılacak yapma.

Benim görüşüm: belki sorun "V" (görünüm) hakkında güncel dogma olarak, "MVC" çok değil. Mevcut dogma görünümü must kod bir "nesne d 'sanat" içine dokunmuş olması için sahip olduğu bir (HTML) şablon, olması gibi görünüyor. Bir çok uygulama için iddia olabilir, bu sadece makyaj eseridir.

Belki de daha iyi / alternatif "view" teknolojisi gerekir: Bir pazarlama kiosk (should bir sanat eseri), biz bir API formları ve diğer üretmek için yapmak yerine, bir CRUD düzenleme görevi ayarlarken Bir tarayıcıda javascript gibi "DOM" modelini (veya benzeri java AWT) kullanarak UI öğeleri? Sadece bir düşünce.


Buna karşılık Yorumlamak için:

"... Ben sadece bir görünüme şeyler geçer bir sınıf sahip önlemek istiyorsanız ..."

Bu işin bir minimum olduğunda Öncelikle, bu bir kod minimum yapmak için yapılabilir olmalıdır. Örneğin, ben tek tek fonksiyonlar / işleyicileri için bir sınıf, haritalama istekleri halinde uygulamanın belirli bir "bölge" içerisinde nasıl "Raylar" otomatik yolları istekleri gibi. Ben daha özlü yanıtları tutmak için, java kodunda bu davranışı taklit ettik.

İkincisi, bu "bir görünüme geçen bilgileri" "basit adımlar bir boru hattı boyunca veri geçirerek, hesaplamak ve mağaza" sadece belirli bir örneğidir. Onu anlamak ve korumak için kod kolaylaştırır. Ben bir hardcore "fonksiyonel programlama" hayranı değilim, ama (kolaylıkla) kodu bir parça veri akışını kavrayabilme olmak için söylenecek bir şey var. Bir yan fayda olarak, genellikle kod gerçekten de biraz daha hızlı çalışmasını yapar (unintuitively, öyle görünüyor). Ben önce "yerellik" hakkında ranted ettik, dolayısıyla burada tekrarlamak istemiyorum.

Nasıl görünümü farklı biçimlerde karşılamak için ayarlanır? Örneğin html yanıt, json yanıt vb

MVC web için bir meraklı tasarımı bir parçasıdır. Çoğu zaman, gerçekten görünümü ve kontrolör arasındaki mesafeyi gerekmez. Öte yandan, uygulama devlet olarak URL hareket, çünkü ikisi arasında birlikte çalışabilirlik bir seviyede gerekir. Bu iki senaryo birine yol açar; Eğer sadece kısmi bir ayrılık olsun, ya da karmaşık bir sürü olsun ya. Ne çok faydalıdır.

Ben en çok çerçeveler rahat bir ayrılık tercih olduğunu söyleyebilirim. Raylar ve kendi php klonlar genellikle bu stratejiyi izleyin. Şahsen ben gerçekten bu noktaya görmüyorum. İki katmanlı (örn. modeli / sunum) tasarım uygulamaları çoğunluğu için iyi çalışabilir.

Ancak yanlış - - bir standart bulunuyor çünkü bir endüstri standardı kullanmak için olsa söylenecek bir şey var. Kendi mimarisi kadar yemek varsa, diğer geliştiriciler bir zor zaman onu bulmaktan olacaktır. Sadece doğru böyle bir şey almak içine oraya gider ne kadar iş hafife alınmamalı.