Saya telah dilempar pertama ke pekerjaan baru mengembangkan aplikasi web dalam PHP. Saya sama sekali tidak baru dalam PHP, tetapi saya belum pernah mengembangkan aplikasi berskala besar sebelumnya. Saya bertanya-tanya bagaimana cara menyusun pengembangan saya untuk menghindari mempersiapkan diri untuk masalah di masa depan. Bagaimana cara merancang dan merancang aplikasi saya dengan cara yang memungkinkan mereka untuk mengukur dari waktu ke waktu dalam hal fungsi dan kinerja. Saya memikirkan hal-hal seperti:
- Memisahkan ujung belakang dari ujung depan
- Struktur direktori
Saya akan menghargai petunjuk untuk pola desain arsitektur dan aplikasi, kerangka kerja dan metode yang memungkinkan saya untuk mendekati pengembangan aplikasi web PHP skala besar secara berkelanjutan.
web-development
design
php
architecture
Brad Morris
sumber
sumber
Jawaban:
Diagram kasar arsitektur proyek skala besar terbaru yang saya ikuti.
Itu hanya garis besar dasar, diadaptasi dari dokumen arsitektur aktual dan disajikan dengan cara yang menyerupai pendekatan n-tier khas dikombinasikan dengan pendekatan MVC yang khas . Seperti yang Anda lihat logika dan tingkatan data terhubung melalui lapisan layanan, dan lebih khusus lagi API REST , yang terinspirasi oleh Recess , kerangka kerja PHP yang kurang dikenal.
Jangan menemukan kembali roda
Saya bekerja dengan tiga kerangka kerja:
Zend Framework
Raksasa kerangka PHP, dengan basis kode yang ditulis dengan sangat baik dan daftar fitur yang luas. Pada aplikasi skala besar Anda akan menemukan diri Anda mengutak-atik kerangka kerja lebih sering daripada tidak, dan saya menemukan basis kode ZF yang paling menyenangkan untuk dikerjakan. Namun berhati-hatilah, ini bukan kerangka kerja entry level .
Kohana
Kohana awalnya merupakan cabang dari CodeIgniter, dan itu adalah alasan yang cukup bagi saya untuk tidak menggunakannya, pada awalnya. Saat ini telah tumbuh menjadi kerangka kerja yang solid dan elegan yang membedakan dirinya dari satu sama lain dengan mengikuti pendekatan Hierarchical MVC . HMVC memungkinkan untuk memperluas modularisasi dari MVC . Untuk proyek dalam diagram saya mengadaptasi HMVC Kohana ke ZF, tapi saya sudah mulai menggunakan Kohana untuk proyek yang lebih kecil dan mempertimbangkannya untuk yang lebih besar juga.
CodeIgniter
Saya hanya menggunakannya karena proyek warisan yang saya warisi, hindari jika memungkinkan.
Seperti yang ditunjukkan oleh jawaban lainnya, ORM selalu berguna. Saya menggunakan Doktrin secara luas, dan Anda harus melihat pada pemetaan merek baru untuk CouchDB dan MongoDB . Skalabilitas adalah suatu keharusan pada aplikasi skala besar dan Anda harus mengevaluasi solusi NoSQL .
Semua yang dikatakan, yang penting untuk diingat adalah bahwa aplikasi yang lebih besar biasanya memiliki tantangan unik. Anda harus mengevaluasi setiap solusi pihak ketiga populer yang ada, dan Anda mungkin akan mendapatkan banyak dari beberapa solusi yang tidak jelas. Ketika saya pertama kali mengevaluasi Recess, itu jauh dari produksi siap tetapi pendekatannya pada dasarnya membuatnya menjadi proyek.
Performa
Pada situs web tipikal Anda mungkin lolos dengan caching keluaran sederhana dan caching opcode tetapi pada aplikasi skala besar Anda harus benar-benar mempertimbangkan caching memori, yang paling umum adalah membangun memcached .
xdebug sebagian besar dikenal sebagai debugger, tetapi dapat berfungsi sebagai profiler juga. Saya baru-baru ini mulai menggunakan Zend Server dan saya sangat menyukai fitur penelusuran kode . Sayangnya itu tidak tersedia di Edisi Komunitas , tetapi xdebug adalah alternatif yang lumayan.
Jika Anda menggunakan Apache, pastikan untuk mengoptimalkannya . nginx dan lighttpd adalah pilihan yang tampaknya lebih baik , kinerja bijaksana, tapi saya belum pernah menggunakan mereka banyak dan saya tidak bisa mengatakan.
Sedangkan untuk basis data, kueri & hasil caching Doctrine bekerja sangat baik, terutama dikombinasikan dengan memcached . Dan tentu saja, kita tidak bisa melupakan ujung depan. Tim Kinerja Luar Biasa Yahoo telah mengumpulkan daftar praktik terbaik yang luas . Saya bukan pengembang front-end, tetapi saya telah melihat hasil luar biasa pada proyek solo.
Terakhir PHP memiliki mekanisme pengumpulan sampah yang baru , layak untuk dilihat.
Keamanan
Dunia keamanan PHP kacau balau. Saya bukan ahli, jadi perlakukan yang berikut ini sebagai kiat umum:
Buka Proyek Keamanan Aplikasi Web
Ada banyak hal bagus di sana, tetapi untuk tinjauan singkat Anda harus mulai dengan daftar sepuluh besar . Dan riset solusi PHP untuk kerentanan umum tersebut.
Stack kerentanan
Kebiasaan yang baik adalah memantau bug terbuka PHP secara berkala . Bahkan jika Anda sendiri bukan ahli, hampir selalu ada tips untuk mengatasi ancaman keamanan. Dan tentu saja, Anda harus memperluas kebiasaan itu ke setiap bagian tumpukan, terutama yang paling rentan, seperti server web dan basis data.
Kerumunan orang di IT Security Stack Exchange dapat membantu Anda dengan jawaban yang lebih terdidik.
Bacaan lebih lanjut
sumber
Situs web developerworks IBM memiliki banyak sekali artikel PHP , banyak di antaranya cukup bagus. Mereka memiliki serangkaian artikel yang membandingkan kerangka kerja PHP , dan seri lain tentang situs web menggunakan kerangka kerja CakePHP .
Situs web "Onlamp" lama O'Reilly memiliki artikel tentang MVC dalam PHP . Penulis artikel itu kemudian menjelaskan MVC secara terperinci .
Artikel-artikel O'Reilly agak tua, tetapi mereka akan membantu Anda. Hal-hal yang dikembangkan oleh IBM sangat bagus, dan mencakup banyak hal yang Anda minta.
sumber
Saya telah menangani PHP selama beberapa tahun sekarang. Meskipun saya setuju dengan Yannis bahwa pertanyaan ini entah bagaimana terbuka, saya pikir saya akan memberi Anda beberapa petunjuk. Pertama, seperti kata Yannis, Anda harus melihat ke MVC, untuk melakukannya, dua kerangka kerja yang bisa saya rekomendasikan adalah CodeIgniter dan Symfony . Yang pertama ringan dan sangat mudah untuk memulai, namun, Anda mungkin hanya perlu menambahkan beberapa penyesuaian tambahan untuk membuat pengaturan yang bagus bekerja, akan segera melakukannya. Symfony adalah proyek yang dimulai oleh Fabien Potencier yang menggunakan banyak pola desain dalam rekayasa perangkat lunak, namun kurva belajarnya jauh lebih curam daripada milik CodeIgniter .
Sekarang, kedua, Anda harus melihat ke koneksi basis data, yang membawa saya ke dalam dua kerangka kerja ORM yang paling menonjol untuk PHP, Doctrine dan Propel . Secara pribadi saya suka Propel dan bahkan menulis tentang cara mengatur instalasi Propel yang bersih pada aplikasi berbasis CodeIgniter , namun, Symfony lebih ke dalam Doktrin , tetapi mari kita gunakan salah satunya. Jika Anda ingin memeriksa lebih lanjut tentang Ajaran dan Propel , lihat pertanyaan ini yang saya tanyakan beberapa waktu yang lalu.
Akhirnya, Anda harus melihat ke dalam kerangka templating, seperti Smarty , Dwoo atau Twigg . Smarty adalah yang tertua dan karenanya paling stabil. Dwoo mewarisi dari Smarty dan menambahkan satu atau dua hal untuk mendukung OOP lebih baik di PHP 5. Akhirnya Twigg adalah alternatif templated yang disediakan oleh tim Symfony , saya belum melihatnya sendiri tetapi jika itu berasal dari tim Symfony itu pasti bagus .
Semoga seluruh pembicaraan ini masuk akal, David
sumber