Ne bir "gerçek" bir çerçeve yapar

7 Cevap java

MVC çerçeveler hakkında çevrimiçi tartışmalar okurken, ben yorumların bir sürü "bu akıllı kesmek vardır, ama doğru değil MVC" ven Java / NET geliştiricilerin Cake, Kod Ateşleyici ve Symfony gibi PHP projeler işaret etti duyuyorum.

Peki, bir şey, bir "gerçek" MVC çerçevesi yapar; vs, yani farklı Cake daha şeyler yapan bir. NET veya Java MVC çerçevesinde, Kod Ateşleyici, Symfony, bir örnek ne, ve bu farklı şeyler nelerdir? Bir ön yükleme gerektiren zorunlu bir nesne yönelimi sadece PHP'nin eksikliği mi, yoksa başka bir şey mi?

PHP dili "berbat" neden ben MVC uygulanması ve / veya kullanımdaki farklılıkları daha çok ilgileniyorum, biliyorum.

7 Cevap

MVC fikri üç bağımsız kısımda uygulama mimarisi ayrıştırarak, ve bu katmanların her biri diğer kademelerin etkilemeden, farklı bir uygulama kullanmak için izin vermektir. Çoğunlukla ayrım iş mantığı (Model) ve sunum (View) arasındadır.

Birçok PHP çerçeveler Modelin doğru işleyişi bu kadar "inatçı yazılım" Raylar felsefesi üzerine Ruby kullanımı ve hem de belirli bir uygulama için uygun olmasını gerektiren Birlikte görüntüle çalışın. Yani, sınıflar belli bir şekilde adlandırılmış olması, proje dosyaları belirli bir dizin yapısına göre organize olması, Görünüm komut dosyalarında notasyonu, vb kuralını takip etmek zorunda

Bu zor bağımsız olarak her katman farklı uygulamalarını yerine getirir ve bu birbirinden kademelerin ayırmasının MVC'ın hedefi aykırıdır.

Sen this wiki sayfa yararlı olabilir.

Gerçek bir MVC framework yok M (odel) tabakası vardır. CakePHP ve arkadaşlar Denetleyicisi veri işleme toplu bırakarak, onlar Model çağrı veritabanına erişmek için bazı akıllı sınıfları var.

Bu yanlış. Model, tüm veri işleme yapmak (ve can Bunun için veritabanı sınıfları yardımcı kullanın) olmalı ve Denetleyici kullanıcı / web sayfası ve modeli arasındaki geçit olmalıdır. Çoğu zaman, model, herhangi kurallarına bağlı kalarak değil, basit bir PHP nesnedir, böylece çerçeve bu kuralları belirtebilirsiniz olamaz.

İşte çerçevesi iyi ve gerçek olup olmadığını görmek için yardımcı olabilecek birkaç soru vardır.

"Can i run unit tests for my MVC classes without framework?"

Ve bu birim testi yazmak bile geçerlidir.

Sen çerçevesinde bağımsız MVC ilgili kod yazmak gerekir. Eğer uygulama çerçevesinde bazı input aldığında, o, as objects with known interfaces hiçbir somut sınıflar olmalıdır.

Şey true MVC framework mimarisi kendisi ile ilgili bir (or very limited) etkisi olurdu, bir. En iyi ihtimalle, bu sadece bir clear sağlamak ve easy yolu MVC mafyadan almak için başvuru çağrısı için olacaktır. Ve belki You .. değil sınırlamalar ve kısıtlamalar için kolaylıklar sağlar.

"Does it run on magic and fairy dust?"

Sen çerçeve tarafından sağlanan herhangi bir sınıf, genişletmek gerekir. Ve bunu uygulamak gerekir hangi işlev anlamak kolay olmalıdır.

Eğer "thing just happen" bunu yapmak çok zor olur. Bu genellikle çerçevenin kodu küresel durumuna işaret ediyor. Ya statik yöntemler veya global / statik değişkenler şeklinde.

"At which point MY code kicks in?"

Nerede ve nasıl size denetleyici idam olur bulabilirsiniz? Genellikle tüm bu kolay olmayacak. Bu mistik noktası genellikle nesne grafiğinde derin. Bazen uzun bir sınıfta.

Böyle durum, ortamı değiştirmek için çok zor hale getirir, kontrolör idam edildiği. Ayrıca denetim metotları gibi görünmelidir nasıl sıkı kurallar koymuştur.

Bu, tüm geri noktaya getiriyor, bu doğru MVC çerçevesinde gerektiği enhance the development process instead of restricting seçenekleriniz de.

"Was he/she supposed to be able to do this?"

Kimlik doğrulama bir yetkilendirme gelişim ayrı bir yönü gibi görünebilir, ama aslında, MVC bağlamında, biraz zor olması bir eğilim olmasıdır.

Çerçeveler bir sürü bazı kimlik doğrulama / yetkilendirme altyapısı var. Bu tekrarlayan bir iştir ve biz tüm bu nedenle, ölüme yapmış - bu çerçeve sağlayabilir özelliği için iyi bir aday olduğunu.

Ama burada vurucu: bunlardan en kontrolörleri içine yetki koymak için çalışacağız ve onlar ayarlanmış olabilir konusunda çok seçici. Bu başka bir kısıtlamadır.

Bu aşağı gelir bu. Herhangi bir çerçeve için, must not require to rewrite every controller just to add login işlevsellik. Eğer yanlışlıkla bir şey unutmak için size OCP ihlali görmezden bile, bu sadece bir risk oluşturuyor.

.. Benim iki kuruş

Bu durumda uygulama - A çerçeve, adından da anlaşılacağı gibi, yapıları desteklemek içindir. Eğer etrafında yüzen görürdük en çerçeveler hakkında yaygın (ve üzgün) şey iş mantığı, sunum, yönlendirme / kontrolünü ayırmaya kendi yolunu dikte, heybetli yapıları kendileri olmasıdır. Sen sadece bir yıl önce yazdığım bir şeyi korumak için bütün bir ekip ihtiyacı benziyor uygulama kodunu görmek istiyorum. Amaç çerçevesinde özelliklerin zenginliği gibi görünüyor. Hayır değil. Sürece görevin kendi uzmanlığı ile bireylerin bir çalışma grubu arasında dağıtılır bileli - Bu ayrılık olması gereken yerde bir uygulamanın hangi bileşenlere ayrılmış olmalı ve ona / kendisi için karar programcı özgürlük vermekle ilgili.

Arada bir yerde birbirleri ile bir şekilde iletişim kurmak için var - - bulanıklık veya ayrım çözümler mimar tarafından karar alınmalıdır ayırma modeli, görünümü ve kontrol arasında olmalıdır olsun.

Bazen insanlar geri adım ve dijital dünya gelen terim var olan gerçek hayat "çerçeveler" bakmak gerekir. Yani kişisel gündemleri sığacak ve diğer sistemlerini küçümsemek için kelime bozan sonsuz çevrimiçi seçenekleri rağmen anlamini açıklamaya yardımcı olabilir.

Bir çerçeve İşinizin her alanında size yardımcı olacaktır.

Yalnızca tek bir portföy sayfası var ise - o zaman sadece araçları küçük bir dizi gerekir. Eğer bir sonraki Facebook başlatırsanız sonra "çerçeve" kitlesel farklı olacaktır.

JavaServer MVC için oldukça iyi bir tam çerçeve yığını olduğunu Faces. İyi Görünüm bileşenleri, yönetilen fasulye ile iyi kontrolörleri ve iş sınıfları oluşturabilirsiniz model için vardır.