PHP web uygulama mimarisi / tasarımı [kapalı]


20

PHP'de web uygulamaları geliştiren yeni bir işe ilk kez başladım. Hiçbir şekilde PHP için yeni değilim, ama daha önce büyük ölçekli uygulamalar geliştirmedim. Gelecekte kendimi sorunlara sokmaktan kaçınmak için gelişimimi nasıl yapılandıracağımı merak ediyorum. Uygulamalarımı işlevsellik ve performans açısından zaman içinde ölçeklenmelerini sağlayacak sağlam bir şekilde nasıl tasarlar ve tasarlarım. Şöyle şeyler düşünüyorum:

  • Arka ucu ön uçtan ayırma
  • Dizin yapıları

Mimari ve uygulama tasarım modellerine, çerçevelerine ve büyük ölçekli PHP web uygulaması geliştirmesine sürdürülebilir bir şekilde yaklaşmamı sağlayan yöntemlere işaret ediyorum.


Merhaba! Web uygulamaları için en yaygın mimarisidir MVC PHP ve diğer her popüler web platformu için. Bununla birlikte, SSS bölümümüzü okumalısınız . Yazılım mimarisi konuyla ilgili olsa da, soruyu biraz daha spesifik olacak şekilde gözden geçirmeniz gerekir. "Genel mimari ile ilgili sağlıklı bir tartışma" sitenin Soru-Cevap formatına uymuyor.
yannis

Ben S / E Siteleri sık ziyaretçiyim, ancak bu soruya kimse cevap olacağını bir duygu vardı, bu nedenle "tartışma" yorum. MVC işaretçisi için teşekkürler :)
Brad Morris

Yanıtlar:


29

Katıldığım en büyük ölçekli projenin mimarisinin kaba bir diyagramı.

resim açıklamasını buraya girin

Gerçek mimari belgelerden uyarlanan ve tipik bir MVC yaklaşımı ile birlikte tipik bir n-katmanlı yaklaşıma benzeyen bir şekilde sunulan sadece temel bir taslaktır . Gördüğünüz gibi, mantık ve veri katmanları, daha az bilinen bir PHP çerçevesi olan Recess'ten esinlenen bir hizmet katmanı ve daha özel olarak bir REST API'si aracılığıyla bağlanmıştır .

Tekerleği yeniden icat etme

Üç çerçeveyle çalışıyorum:

  • Zend Çerçevesi

    Etkileyici bir şekilde yazılmış bir kod tabanı ve kapsamlı özellik listesi ile PHP çerçevelerinin devi . Büyük ölçekli uygulamalarda, çerçeveyi daha sık değiştirdiğinizi göreceksiniz ve ZF'nin kod tabanını çalışmak için en keyifli buluyorum. Ancak dikkat edin, bu giriş seviyesi bir çerçeve değildir .

  • Kohana

    Kohana, CodeIgniter'in bir çatalı olarak başladı ve başlangıçta kullanmamam için yeterli sebepti. Günümüzde, Hiyerarşik MVC yaklaşımını izleyerek kendini birbirinden ayıran sağlam ve zarif bir çerçeveye dönüşmüştür . HMVC, MVC'den daha fazla modülerleştirmeye izin verir . Diyagramdaki proje için Kohana'nın HMVC'sini ZF'ye uyarladım, ancak Kohana'yı daha küçük projeler için kullanmaya ve daha büyük için de düşünmeye başladım.

  • CodeIgniter

    Bunu sadece miras aldığım eski bir proje yüzünden kullanıyorum, mümkünse kaçının.

Diğer cevapların işaret ettiği gibi, bir ORM her zaman işe yarar. Doktrin'i yoğun bir şekilde kullanıyorum ve CouchDB ve MongoDB için yepyeni haritacılarına bir göz atmalısınız . Ölçeklenebilirlik büyük ölçekli uygulamalarda bir zorunluluktur ve NoSQL çözümlerini değerlendirmelisiniz .

Tüm söylenenler, hatırlanması gereken önemli şey, daha büyük uygulamaların genellikle benzersiz zorlukları olmasıdır. Her popüler üçüncü taraf çözümünü değerlendirmelisiniz ve muhtemelen birkaç belirsiz çözümden çok şey kazanacaksınız. Recess'ü ilk değerlendirdiğimde üretime hazır olmaktan uzaktı ama yaklaşımı onu projeye dönüştürdü.

Verim

Tipik web sitelerinde, basit çıktı önbellekleme ve opcode önbellekleme ile kurtulabilirsiniz, ancak büyük ölçekli uygulamalarda gerçekten bellek önbelleğe almayı düşünmelisiniz, ki bu en yaygın olarak memcached etrafında inşa edilir .

xdebug çoğunlukla hata ayıklayıcı olarak bilinir, ancak bir profil oluşturucu olarak da kullanılabilir. Son zamanlarda Zend Server kullanmaya başladım ve kesinlikle kod izleme özelliklerine bayılıyorum . Ne yazık ki bunlar Topluluk Sürümünde mevcut değildir , ancak xdebug oldukça iyi bir alternatiftir.

Apache kullanıyorsanız , cehennemi optimize ettiğinizden emin olun . nginx ve lighttpd'nin vardır görünüşte daha iyi seçimler bilge, performans, ama onlara çok kullanmadıysanız ve gerçekten söyleyemem.

Veritabanına gelince, Doctrine'in sorgu ve sonuç önbelleklemesi özellikle memcached ile birlikte harikalar yaratıyor . Ve elbette, ön ucu unutamayız. Yahoo'nun Olağanüstü Performans ekibi, en iyi uygulamaların kapsamlı bir listesini hazırladı . Gerçekten bir ön uç geliştirici değilim, ancak solo projelerde harika sonuçlar gördüm.

Son olarak PHP'nin bakmaya değer yepyeni bir çöp toplama mekanizması var .

Güvenlik

PHP güvenlik dünyası en az söylemek gerekirse kaotiktir. Uzman değilim, bu yüzden aşağıdakileri genel ipuçları olarak ele alın:

  • Açık Web Uygulaması Güvenlik Projesi

    Çok iyi şeyler var, ama hızlı bir bakış için ilk on listeden başlamalısın . Ve bu yaygın güvenlik açıkları için PHP çözümlerini araştırın.

  • Yığın güvenlik açıkları

    PHP'nin açık hatalarını periyodik olarak izlemek iyi bir alışkanlıktır . Kendiniz uzman olmasanız bile, neredeyse her zaman güvenlik tehditleriyle ilgili geçici ipuçları vardır. Ve elbette, alışkanlığı yığının diğer kısımlarına, özellikle de web sunucusu ve veritabanı gibi en savunmasız olanlara genişletmelisiniz.

IT Security Stack Exchange'deki kalabalık , daha eğitimli yanıtlarda size yardımcı olabilir.

daha fazla okuma


1
Mükemmel cevap; harika sunum; büyük düzen ... Harika iş!
Dinamik

@Jae Teşekkürler! Hepsini okudun mu? : P Biraz uzun, biraz budaması gerekip gerekmediğini merak ediyordum.
yannis

Ha, denedim! ;-)
Dinamik

Aslında Yannis, sana bir sorum var. Geçenlerde PHP ile çok ilgilendim. Kendim öğrenmeye çalışıyordum, ama biraz sorun yaşıyorum. Ayrıca PHP ile kendiniz oldukça iyi görünüyor :-). Biraz rehberlik paylaşmak ister misiniz? Eğer öyleyse, bir sohbet odası oluşturacağım.
Dinamik

Tam aradığım cevap bu! Bu bilgi almak için bir sürü cehennem, sanırım hasta bazı emici ve ertesi saat içinde tinkering yapmak zorunda ama başlamak için bana bir yerde verdin. Teşekkürler :)
Brad Morris

1

IBM'in developerworks web sitesinde, birçoğu oldukça iyi olan çok sayıda PHP makalesi var . PHP web çerçevelerini karşılaştıran bir dizi makaleye ve CakePHP çerçevesini kullanan web siteleri hakkında başka bir diziye sahiptirler .

O'Reilly'nin eski "Onlamp" web sitesinde PHP'de MVC hakkında bir makale var . Bu makalenin yazarı MVC'yi ayrıntılı olarak açıklamaya devam etti .

O'Reilly makaleleri biraz eski, ama onlar seni halledecek. IBM geliştirici çalışmaları gerçekten iyi ve istediğin şeylerin çoğunu kapsıyor.


1

Birkaç yıldır PHP üzerinde çalışıyorum. Yannis'e bu sorunun bir şekilde açık olduğuna rağmen, sana birkaç ipucu vereceğimi düşünüyorum. İlk olarak, Yannis'in söylediği gibi, yu MVC'ye bakmalıyız, bunu yapmak için tavsiye edebileceğim iki çerçeve CodeIgniter ve Symfony . Birincisi hafif ve başlamak çok kolay, ancak güzel bir kurulumun çalışması için bazı ekstra özelleştirmeler eklemeniz gerekebilir, yakında buna girecektir. Symfony, yazılım mühendisliğinde tasarım modellerinin çoğunu kullanan Fabien Potencier tarafından başlatılan bir projedir , ancak öğrenme eğrisi CodeIgniter'lerden çok daha diktir .

İkincisi, beni PHP, Doctrine ve Propel için en önemli iki ORM çerçevesine götüren veritabanı bağlantısına bakmalısınız . Şahsen Propel seviyorum ve hatta yüklemek temiz bir Propel kurmak için nasıl yazdı bir üzerinde CodeIgniter ancak Symfony'nin daha içine, esaslı app Doktrini ikisinden birini, ama olsun. Doctrine ve Propel hakkında daha fazla bilgi edinmek isterseniz, bir süre önce sorduğum bu soruya bir göz atın .

Son olarak, Smarty , Dwoo veya Twigg gibi cazip bir çerçeveye bakmalısınız . Smarty en eskisi ve dolayısıyla en kararlı olanıdır. Dwoo devralır gelen Smarty ve daha iyi PHP 5 üzerinde destek OOP bir iki şey ekler Nihayet Twigg sağlanan şablon alternatiftir Symfony'nin ekibi , kendim göremiyorum ama o geliyorsa Symfony'nin ekibi güzel olmalı .

Umarım bütün bu konuşma bir anlam ifade eder, David

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.