Arsitektur / desain aplikasi web PHP [ditutup]

20

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.

Brad Morris
sumber
Hai! Arsitektur yang paling umum untuk aplikasi web adalah MVC , untuk PHP dan setiap platform web populer lainnya. Karena itu, Anda harus membaca FAQ kami . Meskipun arsitektur perangkat lunak sesuai topik, Anda perlu merevisi pertanyaan agar menjadi sedikit lebih spesifik. "Diskusi sehat tentang arsitektur umum" tidak sesuai dengan format T&J situs.
yannis
Saya sering berkunjung ke Situs S / E, saya merasa tidak akan ada jawaban untuk pertanyaan ini, oleh karena itu komentar "diskusi". Terima kasih untuk penunjuk MVC :)
Brad Morris

Jawaban:

29

Diagram kasar arsitektur proyek skala besar terbaru yang saya ikuti.

masukkan deskripsi gambar di sini

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

yannis
sumber
1
Jawaban bagus; presentasi yang bagus; tata letak yang bagus ... Kerja Bagus!
Dinamis
@ Ja, terima kasih! Apakah Anda sudah membaca semuanya? : P Ini agak lama, saya bertanya-tanya apakah saya harus memangkasnya sedikit.
yannis
Ha, saya mencoba! ;-)
Dinamis
Sebenarnya Yannis, saya punya pertanyaan untuk Anda. Saya baru-baru ini tumbuh sangat tertarik dengan PHP. Saya sudah mencoba mempelajarinya sendiri, tetapi saya mengalami sedikit kesulitan. Sepertinya Anda cukup baik dengan PHP :-). Maukah Anda berbagi sedikit panduan? Jika demikian, saya akan membuat ruang obrolan.
Dinamis
Itulah jawaban yang saya cari! Ini info yang sangat banyak, saya pikir saya harus melakukan beberapa peresapan dan bermain-main selama satu jam berikutnya, tetapi Anda telah memberi saya tempat untuk memulai. Terima kasih :)
Brad Morris
1

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.

Bruce Ediger
sumber
1

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

David Conde
sumber