PHP: Kişisel Bir Çerçeve

7 Cevap php

I'm going to write a framework for my web projects in PHP. Please don't tell me about considering to use some existing framework (Cake, CodeIgniter, Symfony, etc.) - I have already had a look at them and decided to write one for myself.

Çerçeve kendisi esas olarak bir modül sistemi, veritabanı işleyicisi ve bir şablon çözümleyici oluşacaktır. (Pek çok başka şeyler de, elbette)

With module system I mean that every module has exactly one PHP file and one or more templates associated with it. An example module would be modules/login.php that uses templates/login.tpl for its design.

De, bu gün herkes (?) MVC (Model View Controller) kavramı hakkında konuşuyor ve mevcut çerçevelerin çoğu kullanabilirsiniz.

So my questions are the following:

  • MVC kişisel bir çerçeve için gerçekten etkili mi?
  • Bir modül sistemi kullanmak kötü bir fikir olurdu?
  • Hiç kendiniz için bir çerçeve yazmak mı? Deneyimleriniz nelerdir?

7 Cevap

Is MVC really effective for a personal framework?

Evet, olabilir. (Öğrenmek için çalışıyorsanız, hangi mutlaka kötü bir şey değil) biraz overkill olabilir rağmen,

Would it be a bad idea to use a module system?

Bu kötü bir fikir değildir.

Did you ever write a framework for yourself? What are your experiences?

Ben bir stajyer iken benim grubun PHP uygulamaları için ortak bir güvenlik çerçevesi yazdı. Ben çok şey öğrendim, ama bir bütün olarak proje önceden inşa çözümden daha fazla yararlanmış olabilir.

Ben sadece önceden oluşturulmuş bir çözüm yüklü Tabii ki, ben kadar öğrenmiş olmazdı. Yani her zaman, özellikle kişisel projeler için, o hesaba almak zorunda. Bazen yeniden icat tekerlek iyi şeyler öğreneceksiniz tek yoludur.

Is MVC really effective for a personal framework?

Onun belirsiz yorumlanması nedeniyle artık MVC hangi araçlar, iş mantığı, sunum ve işleme girilir. Eğer onlardan herhangi üçünü içermeyen bir uygulama tasarım hedefliyoruz sürece Yani, MVC, kendi belirsiz anlamda, çok uygundur.

Genellikle farklı kod dosyalarına fikirlerin fiziksel ayrılmasını talep gibi, ancak, arzu daha resmi olabilir. Hızlı ve kirli görevler veya hızlı prototipleme daha hızlı kurulum işlemleri kaçınılması halinde olabilir.

Uzun vadede, ne MVC sorar bakım ve modifikasyon veya ek yollarla uygulamanın sürdürülebilirliği için faydalıdır. Bunu kaçırmak istemeyeceksiniz. Tüm çerçeveler olsa, doğru uygulamaları teşvik. Ben sizin yetersiz denedim çeşitli uygulamaları bulmak şaşırmadım. Benim kişisel favori Agavi olduğunu. Bana ve başkalarına doğru hissetmiyorum PHP çerçeveler bir dünyada, Agavi doğru şeyleri yapmak için çıkar. Agavi çekim değer.

Would it be a bad idea to use a module system?

MVC iş mantığı, sunum, ve giriş taşıma bileşenleri ayırmak ister, ama bu dosyaların düzen nasıl önermek değildir. Ben bu bir modül sistemi ile adresleme sorundur tahmin. Sorunuzu yanıtlamak için: modülleri alt-dizinleri aynı hizmet vermektedir. Öğeler az ise, onun muhtemelen daha sorunsuz dosyalar mantıksal kendilerine ayrılmış olabilir bile alt dizinleri ile rahatsız. Öğelerin sayısı çok büyüyünce, onun onları bulmak için artık hantal tüm ve alt-dizinleri daha iyi bir seçenek olur.

Altyapıları sen kendi yapılandırılabilir varlık gibi modülleri ile başa çıkmak için bir işleve çakmak olacaktır. Aynı işlevsellik gibi ve belki de bir daha hantal bir malikâne, modülleri olmadan var olabilir. Bununla birlikte, öncelikle bir sistem olarak modülleri düşünmüyoruz. Sistem size uygun bulmak ne kurulum için onları adapte böylece acayip belirsizdir.

Did you ever write a framework for yourself? What are your experiences?

Evet web uygulamaları sorunları çözme için çeşitli yaklaşımlar ile birkaç çerçeveler yazdı. Yazdığım her tür bir çerçeve hayati bir öğrenme eğrisi ama hiçbir şey oldu. Her çerçevede ben yazılım bina ile daha fazla sorunlar keşfetti yaptı. Bir program yapmak istedi ben tam adalet bunu çünkü ilginç bir şey oluşturmak için başarısız olduktan sonra, ben hala kazandı.

Ben bu istediğiniz öğrenme deneyiminin bir tür olup olmadığını devam öneririz. Aksi takdirde, Agavi denemek. Bu da başarısız olursa, size çerçeve ne yapacağını açık ve ayrıntılı özellikleri sahip olmasını sağlamak. Gerçekten zor bir yazılım, iş yapma içine mavna ve hiçbir şey başarmak kolay yolu exactly yazılım ne yapacağını önce elden karar etmektir. Zihnimde kod tek şey yapma içine koştu her zaman oldu I will do it right. Ne oldu farklı bir hikaye oldu: oh, iyi ben mantıklı görünüyor gibi bir yönlendirme sistemi yapmak gerekir; hmm, tamam, şimdi iyi bir çiftleşmiş sisteme ihtiyacımız var; tamam, şimdi veritabanı soyutlama için zaman; ama gee, ne düşünce bir sürü; Ben ilham için yazılım XXY aynı sisteme bakmak gerekir. Orada yalvarır ilk varolan yazılımı kullanmak için ortak bir çığlık olduğunu.

Çerçevenin tüm somun ve civata yanlış hissettim çünkü ben bunu düşündüm neden doğru değildi. Aslında, ben onlarla hiç çalışmamış çünkü ne kadar doğru ya da yanlış hakkında hiçbir şey bilmiyordu. Ne ile işe yaramadı emaye idi ve sakat hissettim. Kendi çerçevesi türetmek için hızlı yolu birbirinden somunları ve cıvataları çalmak ve kendi emaye tasarım gerçekten. Bu bir uygulama bina gördüğünüz ne olduğunu ve açıkçası konularda sadece bir parçasıdır. Herşey Demirbaş da bir zaman kaybıdır. Ancak, zaman onun değil bir atık yazılım oluşturmak için nasıl öğrenmek için.

Eğer başka sorularınız varsa, lütfen sorunuz. Benim kendi tecrübesi ile cevap mutluyum.

Ben de aslında benim bir arkadaşım ile bir php çerçeve yazıyorum. Ben kesinlikle ne anlayabiliyorum.

Ne yapıyorsun ben bir şey mvc yakındır. Sen görünümleri gibi şablonlar var. Ve kontrolör olarak modülleri. Yani bu ok düşünüyorum. İhtiyacınız olan tek şey bir modeldir. Yani aktif kayıtlarının bazı tür olacaktır.

Biz şu anda kendi aktif kayıtları motoru yazıyoruz dışında benim çerçevede simular kavramlar vardır. Ben ne yapmak kötü olmadığını düşünüyorum. Ama bu kodu görmeden söylemek zor.

Seni çözmek zorunda tek sorun bakın. Bir çerçeve mükemmel entegre edilmelidir. Bu modül uygulama kodlama yaparken her zaman modülünün düşünmek zorunda kalmadan entegre güzel görünmesi için her zaman karmaşık bir yapıya sahiptir.

  • MVC kişisel bir çerçeve için gerçekten etkili mi?
  • Bir modül sistemi kullanmak kötü bir fikir olurdu?

Evet öyle. Ama MVC her yerde istediğiniz modeli, görünüm ve denetleyici arasındaki çizgi çizmek böyle bir Loosy-Goosy tasarım modelidir. Bana göre, en önemli parçaları modeli ve görünümü vardır. Ben sadece bir veritabanından bir şablon doldurarak html oluşturmak sayfaları, php modülleri var. Sayfalar görünümü ve veritabanı modelidir. Herhangi bir ortak uygulama-özel kodu "kontrolörler" içine çarpanlarına olabilir. Bir örnek, birden çok sayfa verileri işlemek için kullanması gereken bir ortak, sofistike bir sorgu olabilir.

Bunun dışında güvenli veritabanı erişimi, basit çiftleşmiş ve diğer şeyler için yarar var.

  • Hiç kendiniz için bir çerçeve yazmak mı? Deneyimleriniz nelerdir?

Evet. Ben mi çok sevindim. Ben basit tutabilirsiniz. Ben çalıştığını yakından biliyorum. Ben kimseye bağımlı değilim ama kendimi. Ben henüz yararlı basit tutabilirsiniz.

Bazı göstericiler (0x912abe25. ..):

Every abstraction comes with a cost.

Fantezi alamadım. Basit tutmak pişman olabilir. Soyutlama sadece doğru miktarda ekleyin. Eğer aşırı soyut ve basit olması gereken bir şey aşırı karmaşık oldu sizi bulabilirsiniz. Ben bu hatayı yaptım biliyorum. Unutmayın You-aint-olacak-gerek-it.

Scope your variables well

Yaparak sayfalarını yüklemek etmeyin

      include_once('...page file ...');

beklenen nerede o sayfa dosya farklı küresel değişkenleri bakarak yürütmek için inline php bir grup olacaktır. Sen kapsamın tüm duygusunu kaybetmek. Bir fonksiyon içerisinde sizin sayfa dosyası yüklerseniz, bu kötü alabilirsiniz:

      function processCredentials()
      { 
           if (credentialsFail)
           {
                 include_once('loginpage.php');
           }
      }

Ayrıca, kapsamı ile değişkenler olarak şablonlar içine takılı bir şey, kapsam tedavi gelince. Eğer (bir ana index.php falan gibi) o şablonu ile ilişkili sayfa dosya dışında bir şey şablonlar doldurmak dikkatli olun. Bunu yaptığınızda bu sizin için doldurulan tam olarak ne ve şablon içine takmak için gerekli olan ne belli değil.

Don't over-model your database with OO.

Veritabanına basit erişim için yararlı soyutlamalar oluşturmak. Bu birincil endeksine göre bir nesnenin içerisine bir satır getiriliyor gibi basit bir şey olabilir.

Daha karmaşık sorgular için, uzak SQL utangaç yoktur. Girişlerinizin sanitasyon ve doğrulama garanti basit soyutlamaları kullanın. Veritabanını uzak soyutlayarak ile çok deli alamadım. KISS.

O feels daha iyi çünkü ben, MVC bana daha mantıklı olduğunu söyleyebilirim, ama sadece pratik fark, login.php modeli (veri yapısı tanımlar) ve sayfa için denetleyici (kod hem de içerecektir olduğunu eylemler). Sen modülüne bir dosya ekleyebilir, örneğin class.login.php ve esasen bir MVC yapısı uygulamak olur ki, bunun için __autoload() kullanın.

Bir çerçeve yazma ödüllendirici bir deneyim olabilir. Dikkate almak önemli şey kendi iyiliği için bir çerçeve yazmak kalmamasıdır. Tek bir çerçeve yazıyor nedeni geliştirme kolay hale getirmektir.

Bu kişisel bir çerçevedir beri bunu you daha az güçlük ile geliştirmeye nasıl yardımcı olabileceğini açısından düşünmek gerekir.

Ben bir şablon sistemi iyi bir fikir olduğunu sanmıyorum. Bunu düşünün - bir şablon sistemi kullanmanın önemli bir yararı nedir? Cevabı farklı beceri setleri ile ekipleri ortaklaşa bir uygulama geliştirmeye yardımcı olmasıdır. Diğer bir deyişle, ekibin bazı üyeleri kullanıcı arayüzü üzerinde çalışabilir ve onlar PHP kodlama olması gerekmez. Şimdi, kişisel bir çerçeve büyük olasılıkla tek bir kişi tarafından kullanılır ve şablon sisteminin yararı alakasız olur.

Sonuçta, kendi kodlama alışkanlıkları ve yöntemleri bakmak ve tipik bir proje üzerinde çoğu zaman alabilir görevleri keşfetmek gerekir. Sonra daha az zaman ve çaba gerektiren bu görevleri otomatik nasıl kendinize sormalısınız. Bu otomasyon mekanizmaları uygulayarak siz (bir API benzer) sözleşmelerin çeşit sopa var olacaktır. Yardımcı mekanizmalar ve sözleşmelerin toplamı kişisel çerçevesi olacaktır.

İyi şanslar.

  1. MVC çalışmıyor
  2. Eğer "modüller" yapısında kısıtlı istemiyorum; ayrıca, (templates dizin kötü bir fikirdir) koduna yakın şablonları tutun
  3. hayır

re 1:. Patterns Allen HOLUB en Holub bakın. kısaca: MVC temelde nesne yönelimli ilkeler vazgeçmek gerekir.

Sorma söyle yardımcı olan bir zihinsel hile için çekici bir isim Eğer keep the data and code that acts on it together. Herhangi bir anlamlı işlemleri üzerinde tanımlı ise Views Model ile birkaç, alıcılar ve belirleyiciler bir yığın içine düşmesine neden olur. Doğal olarak Model aittir kod Controllers ve Views arasındaki uygulama yayılmasında daha sonra (!), Sağlıksız uzak Harekete ve sıkı bağlantı üretir.

Model nesneler muhtemelen Dependency Injection bazı formu kullanarak, kendilerini göstermesi gerekir:

interface Display
{
    function display($t, array $args);
}

class SomePartOfModel
...
{
    function output(Display $d)
    {
        $d->display('specific.tpl', array(
            'foo' => $this->whatever,
            ...
        ));
    }
}

OTOH, pratikte çoğu web uygulamaları Model Services ile değiştirilir farklı bir mimari desen, için çağrı bulabilirsiniz. Eğer keep the data and code that acts on it together, ve bildirime doğa PHP neler yapabileceğini daha çok kısa yapar: Aktif veritabanı, hayırrmalize şema ve uygulama özel görünümler uzun bir yol.

Tamam, bu yüzden SQL korkunç ayrıntılı dildir. Ne bazı özlü DSL onu üreten engeller? Sen, ben mutlaka bir ORM kullanarak önermiyoruz. Aslında, tam tersi. Model olmadan, bir ORM için az kullanın zaten var. O çok basit olmalı ama belki böyle bir aracı ortadan kaldırma hayırktasına, sorguları oluşturmak için bir şey kullanmak isteyebilirsiniz ...

Öncelikle, veritabanı mümkün olduğunca uygulama için rahat uygulama ortaya arayüzü tutun. Örneğin, düşüncelerin arkasında karmaşık sorguları gizlemek. Gerektiğinde güncelleme özgü arabirimler Açığa.

Çoğu web uygulamaları değil sadece kendi temel veritabanları sahipleri, onların sadece tüketicilerin sensin. Buna rağmen, çoğu web uygulamaları garip arayüzleri aracılığıyla veri erişim: hayırrmalleştirilmiş bir şema, çıplak kemikleri, ya da ciddi rahatsızlık fiyata bir işlemi kolaylaştırmak için çıktı Normalleştirilmemiş şema başka (çeşitli csv tarzı sütunlar vb) ya . Bu gereksiz yüzden biraz üzgün, ve.

re 2:. birleşik bir yapıya sahip kesinlikle iyi. ne yapmak istemediğiniz bir modül birden fazla dosyası kullanabilirsiniz edilemez bir durum içine kendinizi kilitlemek için.

şablonlar birlikte çalıştığını kod birlikte tutulmalıdır aynı nedenle bunları kullanır koduna yakın tutulmalıdır. şablonlar kod are, form, V MVC. ince taneli şablonları (yeniden) kullanmasına izin vermek isteyeceksiniz. sunum katmanı kodu diğer parçaları gibi DRY olmamalıdır hiçbir neden yok.