MVC PHP web uygulaması denetleyicileri oluşturma ve birleştirme

3 Cevap php

Son birkaç hafta içinde ben PHP kullanarak web uygulamaları için MVC tasarım deseni eğitim olmuştur. Ben desen çalışır ve neden küçük veya büyük web uygulamanın herhangi bir tür uygulama çok iyi bir şekilde nasıl anlamak geniş bir görünüm alıyor.

Anladığım kadarıyla biz çok gibi Controller ile birbirleriyle konuşmak 3 farklı katmanları var:

Kullanıcı Girişi ---> Görünüm ---> Controller ---> Model

Site Çıktı <--- Görünüm <--- Kontrol <--- Model

Benim planlanan uygulama ile benim veritabanındaki her tablo için bir modeli var umuyoruz, ve her model bu tabloyu yönetmek için gerekli tüm işlevleri / mantığı olacaktır. Buna karşılık bu modellerin her biri ilişkili bir görünümü olacaktır. Tabii Modeli ve Görünüm irade onları kullanılmasına olanak sağlayan bir denetleyici var.

Şimdi bu veritabanını gerektiren her bir mantıksal eylem kapalı olduğu gibi başımı etrafında almak kolaydır. Belirli bir eylem birden fazla tablo / model kullanımını gerektirir Ancak, ne olur?

Uygulamanın Yönetici tarafı veritabanını korumak için bir seferde bir modele daha fazla ihtiyacımız olası değildir. Uygulamanın ön-uç veya kullanıcı tarafında farklı bir konudur! Ben belli bir bölümü için makalelerin bir listesini gösteren bir web sayfası, bir liste var diyelim şu anda kullanıcılar oturum açmış - ve SO bir örnek borçlanma - Böyle bir etiket bulutu olarak site istatistikleri.

Madde, Kullanıcıları ve Etiketler - Bu bir sayfa en az 3 benim planlanan tasarım modellerini gerektirir.

Açıkçası benim tek kontrolörleri onu kesmek için gidiş değildir. Peki ben ne yapmalıyım?

  1. Benim web sayfaları için yeni bir monolitik denetleyicileri oluşturmak?

    • bana istediğiniz sonuçları almak için izin
    • yinelenen kodlama bir sürü gerektirir
    • gerçekten zor korumak için gerekirse değişiklikler
  2. Küçük bir spesifik denetleyicileri yöneten bir "süper" denetleyicisi oluşturma

    • bana istediğiniz sonuçları elde etmenizi sağlar
    • böylece bir komut dosyası değişiklikleri shouldn’t diğerlerini etkileyecek modüler olacak
    • minimal kodu çoğaltma
  3. Create [Burada mükemmel bir çözüm insert]

. Şu anda 2. Seçenek doğru vefasız am teoride tüm gerekli davranış olarak kodlama kısmak gerekir Basitçe, çünkü küçük denetleyicileri var olacak - ve her şey bakımı kolay olacaktır.

Belki de bu gibi görünebilir:

articlecontroller.php

<?php
    //Article Controller Script

    if($_GET['article'] = 'foo')
    {
        //magic necessary for displaying article "foo".
    }
?>

usercontroller.php

<?php
    //User Controller Script

    if($_GET['user'] = 'display')
    {
        //magic necessary for displaying users
    }
?>

supercontroller.php

<?php
    //"Super" Controller

    //magic for setting up page

    if(isset($_GET['article']))
    {
        include('articlecontroller.php');
    }

    if(isset($_GET['user']))
    {
        include('usercontroller.php');
    }
?>

Gördüğünüz gibi, benim süper denetleyicisi bu özel sayfa gerektirir ne bakar ve homurtu işi gerekli denetleyicileri içerir. NB: kod sadece hızlı ve kirli bir örnek :)

SO, sana soruyorum bu yüzden bu yüzden hiç bir yanlısı yoluyla Ancak, ben duyuyorum. Hangi seçenek tercih edilir? Ne Seçenek 3 öneririm ne olur? Herhangi bir kod parçacıkları / örnekleri güzel ama gerekli değildir olacaktır.

Bu kadar bunu yaptıysanız, zaman ayırdığınız için teşekkür ederiz.


Ben bu soruyu güncelleştirmek düşündüm [ve bir cevap kabul - bunu unuttum: P]. Fat Modeller / Skinny Kontrolörleri kavramına bir göz aldı ve ben nasıl yapıldığını seviyorum, bu yüzden kesinlikle yön o alacak.

Ben de diğer çerçeveler bazı bakmak için tavsiye almış ve nasıl kendi MVC desenleri ulaşmak. Almak için bir çok yerine var! Yine de, yol boyunca pek çok yeni şeyler öğrendim, bu yüzden büyük bir yararı yoktu. Ben gelecekte daha fazla soru olabilir, ama şimdi ben bir başlangıç ​​yapmak için yeterli daha var.

Giriş için hepinize teşekkür ederim.

3 Cevap

Ben size model almak istediğiniz yöne katılmıyorum. 1 model = 1 tablo tasarım uzun vadede size zarar edecek.

Her şeyden önce, ben modeli == veritabanı o sıkı kavramı düşmesi gerektiğini düşünüyorum. Çok sık doğru olsa da, gerçekten modeli sadece veri - bu XML dosyaları, bir önbellek, hatta bir web servisi gelebilir.

Tarafından Bill Karwin this excellent answer check out - bu çok iyi bu endişeleri giderir.

İkincisi, bazı konu hakkında okuma yapmak fat models, skinny controllers (veya thin controllers)

Son olarak, sadece bir Bilginize daha fazla olarak, bir "supercontroller" senin fikrin daha yaygın bir "ön denetleyicisi" olarak bilinen şeydir

Eğer gerçekten orada PHP MVC çerçeveler bir göz atmalısınız. Zaten bütün bu şeyleri anladım. Onlar size yardım etmek için URL yönlendirme (/ article/edit/1), iyi MVC ayrılmasını ve büyük dokümanlar olacaktır. Peki yerine denetleyicisi görünümü arama konusunda worring, size uygulama hakkında düşünebilirsiniz. Ben şahsen tons i nihayet dalış aldı zamanın kurtardık.

Orada diğerleri vardır.

Sıfırdan bir PHP MVC çerçeve oluşturma muhtemelen sadece çabaya değmez. Eğer tekerleği yeniden icat ölü seti iseniz, en azından ilham için bu çerçevelerin içine gitti tasarım konuları bir göz atmalısınız.

Kendi çerçevesi oluşturma php hakkında daha fazla bilgi edinmek için tasarım desenleri, oop tasarım ve hakkında daha fazla bilgi için harika.

But do as Byron suggests and view the source code of some mvc frameworks just to get an idea of how they implemented the mvc pattern. Take something from the zend framework, then take something from the cakephp and in the end you'll have something that will work for you and you will also have learned something (NOTE: don't copy code, just get an idea!!)

Süper denetleyici fikir Tamam ama akşam denetleyici argümanlar (bunu nasıl yapacaklarını görmek için Zend ve diğerleri. Htaccess kontrol edin) gibi sorgu dizesi okumalısınız nedenle argüman olarak denetleyici ve dinlenme gibi ilk argüman tedavi edebilir O denetleyicisi.

İyi şanslar!