Mengevaluasi ruang nama PHP

11

Saya berada pada tahap pra-rilis proyek PHP open-source, yang saya harap akan digunakan oleh pengembang lain dalam proyek mereka sendiri. Proyek saat ini tidak mendukung ruang nama dan saya mencoba untuk mengevaluasi apakah itu harus menggunakan ruang nama atau konvensi penamaan PEAR dari Dir_Subdir_Class, yang tampaknya memiliki semua manfaat teknis yang sama tanpa beberapa kekurangan. Sejujurnya, itu bukan pilihan yang mudah.

Beberapa poin pertimbangan terhadap ruang nama:

  • Salah satu cara proyek saya mencoba untuk membedakan dirinya dengan menyediakan API yang lebih sederhana daripada proyek serupa lainnya. Karena ruang nama baru dan juga lebih rumit daripada konvensi penamaan PEAR, memasukkannya ke dalam basis kode akan membuat proyek saya kurang mudah digunakan. Dengan menerapkannya, saya kehilangan beberapa perbedaan dalam hal kemudahan penggunaan.
  • Meskipun saya dapat melihat beberapa manfaat untuk namespaces, mereka tampaknya tidak menyelesaikan masalah yang perlu diselesaikan dalam produk PHP modern yang menggunakan konvensi penamaan PEAR. Memberi nama konflik saat menggunakan proyek saya harus minimal jika tidak ada.
  • Artikel ini memberi saya beberapa jeda dalam mengadopsi ruang nama karena implementasinya kurang dari bintang.
  • Saya juga ragu untuk ikut-ikutan mungkin tidak pergi ke mana pun. Karena ruang nama adalah fitur baru untuk PHP, saya belum yakin bahwa mereka akan menjadi standar.
  • Kesesuaian. Hampir semua kode PHP yang pernah ditulis tidak menggunakan ruang nama karena merupakan fitur baru. Perpustakaan lain tidak akan kompatibel tanpa konversi.

Beberapa poin untuk menggunakan ruang nama:

  • Persepsi. Jika ruang nama menjadi standar dan praktik terbaik, proyek saya dapat dengan cepat dianggap tidak profesional dan usang tanpa itu.
  • Kompetisi. Sementara beberapa proyek PHP yang bersaing mulai menggunakan ruang nama dalam versi terbaru mereka, banyak yang belum melakukan lompatan. Melakukan hal itu sekarang dapat memberi proyek saya leg-up pada proyek lain.
  • Pekerjaan di masa depan akan lebih mudah jika saya beralih sekarang sebelum proyek menjadi publik daripada setelahnya, di mana saya harus mendukung dua versi untuk sementara waktu.
  • Saya ingin mendukung praktik terbaik dan jika namespace menjadi praktik terbaik untuk PHP, proyek saya harus memanfaatkannya.

Dari apa yang bisa saya katakan, Anda harus memilih satu cara atau yang lain; kamu tidak bisa melakukan keduanya. Apakah ada poin yang belum saya pertimbangkan? Apakah ada tanda-tanda obyektif (tidak ada flamewars, tolong) yang mengarah ke atau terhadap ruang nama menjadi standar profesional untuk PHP? Saya akan menghargai wawasan atau sumber daya apa pun yang ingin Anda bagikan karena saya perlu mengambil keputusan segera.

VirtuosiMedia
sumber

Jawaban:

5

Dua tanda bahwa ruang nama di PHP akan tetap ada:

  1. Skema penamaan PEAR ditinggalkan demi ruang nama dalam PEAR2 .
  2. Salah satu tujuan yang dinyatakan Zend Framework 2.0 adalah menjadi contoh penggunaan PHP 5.3 , dengan sepenuhnya memanfaatkan ruang nama, di antara hal-hal lainnya. Saya menganggap ini sebagai indikasi kuat bahwa Zend berkomitmen penuh untuk ruang nama dan akan terus mendukung dan mengembangkannya (mudah-mudahan menjadi lebih baik).

Saya sepenuhnya setuju dengan Anda bahwa implementasi namespaces saat ini kurang, untuk sedikitnya, tetapi argumen Anda yang menentang penggunaannya tidak begitu solid. Bahkan dalam bentuk saat ini, ruang nama menyediakan:

  • Organisasi kode yang lebih baik,
  • Menghindari tabrakan penamaan,
  • Konteks untuk kelas, fungsi dan konstanta.

Perlu diingat bahwa sebagian besar argumen terhadap ruang nama PHP adalah dengan perbandingan dengan implementasi dalam bahasa lain dan tidak bertentangan dengan kemampuan sebenarnya sebagai fitur.

yannis
sumber
+1 untuk tautan. Bisakah Anda memperluas pada organisasi kode yang lebih baik dan poin konteks? Saya memiliki sedikit kesulitan memahami bagaimana ini menyediakan organisasi kode yang lebih baik. Tampaknya sebagian besar proyek akan tetap pada kelas 1: 1 untuk struktur file yang dikelompokkan dalam direktori logis, sama seperti yang akan Anda gunakan dalam skema penamaan PEAR. Bahkan ZF2 terlihat seperti menggunakan direktori dan struktur file yang sama dalam banyak kasus, tetapi sekarang dengan ruang nama. Ini berbeda, tetapi saya tidak selalu melihat bagaimana itu lebih baik atau lebih terorganisir daripada direktori dan file yang terkenal di tempat pertama.
VirtuosiMedia
Saya memiliki masalah dengan titik konteks juga. Jika ada, sepertinya namespace menghapus konteks untuk memiliki gaya pengkodean yang lebih ringkas daripada menambahkan konteks. Sebagai contoh, jika saya instantiate kelas baru jauh di dalam file, saya sekarang perlu menemukan di mana namespace dideklarasikan untuk mencari tahu kelas mana itu daripada langsung terlihat dari nama kelas. Kecuali saya melewatkan sesuatu, sepertinya ruang nama tidak terlalu bertele-tele, tetapi dengan mengorbankan kejelasan.
VirtuosiMedia
@VirtuosiMedia PEAR dan skema penamaan ZF lama meniru ruang nama, jadi tiga poin saya agak benar untuk mereka juga. Apa yang saya coba tunjukkan adalah bahwa jika titik-titik itu benar dalam implementasi ruang nama PHP saat ini, maka snafus kecil mereka tidak cukup untuk tidak menggunakannya. Dengan organisasi kode yang lebih baik yang saya maksud sebagian besar di file, mengadopsi struktur dan hierarki yang masuk akal dan logis untuk kelas Anda, sesuatu yang tentu saja layak tanpa ruang nama. Tetapi ruang nama (dan skema yang meniru mereka) adalah fitur yang membantu Anda mencapai ketiga poin sekaligus.
yannis
Kena kau. Terimakasih atas klarifikasinya. Apakah Anda melihat keuntungan yang signifikan untuk ruang nama aktual dibandingkan ruang nama yang ditiru ?
VirtuosiMedia
1
@VirtuosiMedia Semua poin untuk menggunakan ruang nama yang Anda buat pada pertanyaan itu valid. Untuk itu saya akan menambahkan bahwa ruang nama PHP membantu kode Anda merasa sedikit lebih alami untuk coders dari latar belakang yang berbeda, sesuatu yang mungkin sangat berharga dalam proyek besar. Juga tidak ada standar untuk ruang nama yang ditiru , yakin sebagian besar dari mereka hampir sama tetapi menggunakan ruang nama aktual memastikan bahwa semua orang menggunakan skema yang sama. BTW ada namespacer di luar sana yang bisa Anda gunakan untuk namespacify kode Anda.
yannis