Siapa yang butuh lajang di PHP?
Perhatikan bahwa hampir semua keberatan terhadap lajang berasal dari sudut pandang teknis - tetapi mereka juga sangat terbatas dalam ruang lingkup mereka. Khusus untuk PHP. Pertama, saya akan membuat daftar beberapa alasan untuk menggunakan lajang, dan kemudian saya akan menganalisis keberatan untuk penggunaan lajang. Pertama, orang yang membutuhkannya:
- Orang-orang yang mengkode kerangka kerja / basis kode besar, yang akan digunakan di banyak lingkungan yang berbeda, harus bekerja dengan kerangka kerja / kerangka kerja yang berbeda yang sudah ada sebelumnya, dengan kebutuhan untuk mengimplementasikan berbagai permintaan yang berbeda, berubah, bahkan aneh dari klien / bos. / pimpinan manajemen / unit lakukan.
Lihat, pola singleton inklusif. Ketika selesai, sebuah kelas tunggal kaku di semua kode tempat Anda memasukkannya, dan ia bertindak persis seperti cara Anda membuat metode dan variabelnya. Dan itu selalu objek yang sama dalam permintaan yang diberikan. Karena tidak dapat dibuat dua kali menjadi dua objek yang berbeda, Anda tahu apa objek singleton pada titik tertentu dalam kode - bahkan jika singleton dimasukkan ke dua, tiga kode basis spaghetti yang berbeda, lama, bahkan berbeda. Oleh karena itu, membuatnya lebih mudah dalam hal tujuan pengembangan - bahkan jika ada banyak orang yang bekerja di proyek itu, ketika Anda melihat singleton diinisialisasi dalam satu titik dalam basis kode apa pun yang diberikan, Anda tahu apa itu, apa yang dilakukannya, bagaimana tidak, dan negara itu di. Jika itu adalah kelas tradisional, Anda harus melacak di mana objek itu pertama kali dibuat, metode apa yang digunakan di dalamnya sampai saat itu dalam kode, dan keadaan khusus. Tapi, letakkan singleton di sana, dan jika Anda menjatuhkan metode debug dan informasi yang tepat dan melacak ke singleton saat mengkodekannya, Anda tahu persis apa itu. Jadi karena itu, membuatnya lebih mudah bagi orang-orang yang harus bekerja dengan basis kode yang berbeda, dengan perlunya mengintegrasikan kode yang dilakukan sebelumnya dengan filosofi yang berbeda, atau dilakukan oleh orang-orang yang Anda tidak memiliki kontak dengan. (Yaitu, vendor-proyek-perusahaan-apa pun yang ada, tidak ada dukungan apa-apa). itu membuatnya lebih mudah bagi orang-orang yang harus bekerja dengan basis kode yang berbeda, dengan perlunya mengintegrasikan kode yang dilakukan sebelumnya dengan filosofi yang berbeda, atau dilakukan oleh orang-orang yang Anda tidak memiliki kontak dengan. (Yaitu, vendor-proyek-perusahaan-apa pun yang ada, tidak ada dukungan apa-apa). itu membuatnya lebih mudah bagi orang-orang yang harus bekerja dengan basis kode yang berbeda, dengan perlunya mengintegrasikan kode yang dilakukan sebelumnya dengan filosofi yang berbeda, atau dilakukan oleh orang-orang yang Anda tidak memiliki kontak dengan. (Yaitu, vendor-proyek-perusahaan-apa pun yang ada, tidak ada dukungan apa-apa).
- Orang yang perlu bekerja dengan API , layanan, dan situs web pihak ketiga .
Jika Anda melihat lebih dekat, ini tidak jauh berbeda dari kasus sebelumnya - API pihak ketiga, layanan, situs web, seperti basis kode eksternal yang terisolasi di mana Anda tidak memiliki kendali. Segalanya bisa terjadi. Jadi, dengan sesi tunggal / kelas pengguna, Anda dapat mengelola SETIAP jenis sesi / otorisasi implementasi dari penyedia pihak ketiga seperti OpenID , Facebook , Twitter dan banyak lagi - dan Anda dapat melakukan SEMUA ini pada saat yang sama dari objek singleton SAMA. - yang mudah diakses, dalam kondisi diketahui pada titik tertentu dalam kode apa pun yang Anda tancapkan. Anda bahkan dapat membuat beberapa sesi ke beberapa API / layanan pihak ketiga yang berbeda untuk pengguna SAMA di situs web / aplikasi Anda sendiri, dan melakukan apa pun yang ingin Anda lakukan dengannya.
Tentu saja, semua ini juga dapat menjadi nada dengan metode tradisional dengan menggunakan kelas dan objek normal - tangkap di sini adalah, singleton lebih rapi, lebih rapi dan karena itu lebih mudah dikelola / diuji dibandingkan dengan penggunaan kelas / objek tradisional dalam situasi seperti itu.
- Orang yang perlu melakukan pengembangan cepat
Perilaku lajang seperti global memudahkan untuk membangun segala jenis kode dengan kerangka kerja yang memiliki kumpulan lajang untuk dibangun, karena begitu Anda membangun kelas-kelas lajang Anda dengan baik, metode yang mapan, matang, dan kumpulan akan mudah tersedia dan dapat digunakan di mana saja, kapan saja, secara konsisten. Butuh beberapa waktu untuk mematangkan kelas Anda, tetapi setelah itu, mereka sangat solid dan konsisten, dan berguna. Anda dapat memiliki banyak metode dalam singleton melakukan apa pun yang Anda inginkan, dan, meskipun ini dapat meningkatkan jejak memori objek, itu membawa lebih banyak penghematan waktu yang dibutuhkan untuk pengembangan cepat - metode yang tidak Anda gunakan dalam satu contoh yang diberikan suatu aplikasi dapat digunakan dalam aplikasi terintegrasi lainnya, dan Anda bisa menampar fitur baru yang diminta klien / bos / manajer proyek hanya dengan beberapa modifikasi.
Anda mendapatkan idenya. Sekarang mari kita beralih ke keberatan terhadap lajang dan perang suci yang tidak suci terhadap sesuatu yang berguna :
- Keberatan utama adalah bahwa hal itu membuat pengujian lebih sulit.
Dan sungguh, memang sampai batas tertentu, bahkan jika itu dapat dengan mudah dikurangi dengan mengambil tindakan pencegahan yang tepat dan coding rutinitas debugging ke lajang Anda DENGAN kesadaran bahwa Anda akan men-debug tunggal. Tapi lihat, ini tidak terlalu berbeda dengan filosofi / metode / pola pengkodean APAPUN yang ada di luar sana - hanya saja, lajang relatif baru dan tidak tersebar luas, sehingga metode pengujian saat ini berakhir dengan perbandingan yang tidak sesuai dengan mereka. Tapi itu tidak berbeda dalam aspek bahasa pemrograman - gaya yang berbeda memerlukan pendekatan yang berbeda.
Satu titik keberatan ini jatuh datar dalam hal itu, ia mengabaikan fakta bahwa alasan aplikasi dikembangkan bukan untuk 'pengujian', dan pengujian bukan satu-satunya fase / proses yang masuk ke dalam pengembangan aplikasi. Aplikasi dikembangkan untuk penggunaan produksi. Dan seperti yang saya jelaskan di bagian 'siapa yang butuh lajang', lajang dapat memotong banyak dari kerumitan harus membuat kode bekerja DENGAN dan DI DALAM banyak basis kode / aplikasi / layanan pihak ketiga yang berbeda. Waktu yang mungkin hilang dalam pengujian, adalah waktu yang diperoleh dalam pengembangan dan penyebaran. Ini sangat berguna di era otentikasi / aplikasi / integrasi pihak ketiga ini - Facebook, Twitter, OpenID, banyak lagi dan siapa yang tahu apa yang akan terjadi selanjutnya.
Meskipun dapat dimengerti - programmer bekerja dalam keadaan yang sangat berbeda tergantung pada karir mereka. Dan untuk orang-orang yang bekerja di perusahaan yang relatif besar dengan departemen yang jelas cenderung berbeda, perangkat lunak / aplikasi yang ditentukan dengan cara yang nyaman dan tanpa malapetaka yang akan datang pemotongan anggaran / PHK dan kebutuhan menyertainya untuk melakukan BANYAK hal dengan banyak hal yang berbeda dalam fashion murah / cepat / dapat diandalkan, lajang mungkin tidak begitu diperlukan. Dan itu bahkan dapat mengganggu / menghalangi apa yang mereka miliki.
Tetapi bagi mereka yang perlu bekerja di parit kotor pengembangan 'gesit', harus menerapkan banyak permintaan berbeda (kadang-kadang tidak masuk akal) dari klien / manajer / proyek mereka, lajang adalah anugerah yang menyelamatkan karena alasan yang dijelaskan sebelumnya.
- Keberatan lainnya adalah jejak memorinya lebih tinggi
Karena singleton baru akan ada untuk setiap permintaan dari setiap klien, MUNGKIN ini menjadi keberatan untuk PHP. Dengan singleton yang dibangun dan digunakan dengan buruk, jejak memori suatu aplikasi bisa lebih tinggi jika banyak pengguna dilayani oleh aplikasi pada titik tertentu.
Padahal, ini berlaku untuk pendekatan APAPUN yang dapat Anda ambil saat melakukan pengkodean. Pertanyaan yang harus ditanyakan adalah, apakah metode, data yang disimpan dan diproses oleh lajang ini tidak perlu? Karena, jika mereka diperlukan di banyak permintaan aplikasi yang didapat, maka bahkan jika Anda tidak menggunakan lajang, metode dan data tersebut AKAN hadir dalam aplikasi Anda dalam beberapa bentuk atau lainnya melalui kode. Jadi, itu semua menjadi pertanyaan tentang berapa banyak memori yang akan Anda simpan, ketika Anda menginisialisasi objek kelas tradisional 1/3 ke dalam pemrosesan kode, dan menghancurkannya 3/4 ke dalamnya.
Lihat, ketika diajukan seperti ini, pertanyaannya menjadi sangat tidak relevan - seharusnya tidak ada metode yang tidak perlu, data disimpan dalam objek dalam kode Anda ANYWAY - terlepas dari Anda menggunakan lajang atau tidak. Jadi, keberatan terhadap lajang ini menjadi sangat lucu dalam hal itu, ASUMSI bahwa akan ada metode yang tidak perlu, data dalam objek yang dibuat dari kelas yang Anda gunakan.
- Beberapa keberatan yang tidak valid seperti 'membuat mempertahankan beberapa koneksi basis data menjadi tidak mungkin / sulit'
Saya bahkan tidak dapat mulai memahami keberatan ini, ketika semua orang perlu memelihara beberapa koneksi basis data, banyak pilihan basis data, beberapa permintaan basis data, beberapa set hasil dalam singleton yang diberikan hanya menjaga mereka dalam variabel / array dalam singleton selama mereka dibutuhkan. Ini bisa sesederhana menjaga mereka dalam array, meskipun Anda dapat menemukan metode apa pun yang ingin Anda gunakan untuk melakukan itu. Tapi mari kita periksa kasus paling sederhana, penggunaan variabel dan array dalam singleton yang diberikan:
Bayangkan di bawah ini ada di dalam database tunggal yang diberikan:
$ this -> koneksi = array (); (sintaks yang salah, saya hanya mengetiknya seperti ini untuk memberi Anda gambaran - deklarasi variabel yang tepat adalah public $ koneksi = array (); dan penggunaannya adalah $ this-> koneksi ['koneksikey'] secara alami)
Anda dapat mengatur, dan menjaga beberapa koneksi pada waktu tertentu dalam array dengan cara ini. Dan hal yang sama berlaku untuk kueri, set hasil, dan sebagainya.
$ this -> query (QUERYSTRING, 'queryname', $ this-> koneksi ['particulrconnection']);
Yang hanya bisa melakukan kueri ke database yang dipilih dengan koneksi yang dipilih, dan simpan saja di
$ this -> hasil
array dengan kunci 'queryname'. Tentu saja, Anda perlu memiliki kode metode kueri Anda untuk ini - yang sepele untuk dilakukan.
Ini memungkinkan Anda untuk mempertahankan jumlah koneksi database dan set hasil yang hampir tak terbatas (sebanyak batas sumber daya tentu saja) sebanyak yang Anda perlukan. Dan mereka tersedia untuk SETIAP bagian kode dalam titik tertentu dalam basis kode apa pun yang diberikan ke mana kelas tunggal ini dipakai.
TENTU SAJA, Anda tentu perlu membebaskan set hasil, dan koneksi bila tidak diperlukan - tetapi itu tidak perlu dikatakan, dan itu tidak spesifik untuk lajang atau metode pengkodean / gaya / konsep pengkodean lainnya.
Pada titik ini, Anda dapat melihat bagaimana Anda dapat mempertahankan beberapa koneksi / status ke aplikasi atau layanan pihak ketiga dalam satu singleton. Tidak terlalu berbeda.
Singkatnya, pada akhirnya, pola singleton hanyalah metode / gaya / filosofi lain untuk diprogram, dan mereka sama bermanfaatnya dengan yang lainnya ketika digunakan di tempat yang benar, dengan cara yang benar. Yang tidak berbeda dari apa pun.
Anda akan melihat bahwa di sebagian besar artikel di mana lajang dihancurkan, Anda juga akan melihat referensi 'global' menjadi 'jahat'.
Mari kita hadapi itu - Apa pun yang tidak digunakan dengan benar, dilecehkan, disalahgunakan, IS jahat. Itu tidak terbatas pada bahasa apa pun, konsep pengkodean apa pun, metode apa pun. Setiap kali Anda melihat seseorang mengeluarkan pernyataan selimut seperti 'X itu jahat', larilah dari artikel itu. Peluangnya sangat tinggi sehingga merupakan produk dari sudut pandang terbatas - bahkan jika sudut pandang tersebut adalah hasil dari pengalaman bertahun-tahun dalam sesuatu yang khusus - yang pada akhirnya berakhir sebagai hasil dari bekerja terlalu banyak dalam gaya / metode tertentu - konservatisme intelektual tipikal.
Contoh tak berujung dapat diberikan untuk itu, mulai dari 'global adalah kejahatan' hingga 'iframe adalah jahat'. Kembali sekitar 10 tahun yang lalu, bahkan mengusulkan penggunaan iframe dalam aplikasi apa pun adalah bid'ah. Kemudian datang Facebook, iframe di mana-mana, dan lihat apa yang terjadi - iframe tidak lagi jahat.
Masih ada orang-orang yang dengan keras kepala bersikeras bahwa mereka 'jahat' - dan kadang-kadang juga untuk alasan yang baik - tetapi, seperti yang Anda lihat, ada kebutuhan, iframes memenuhi kebutuhan itu dan bekerja dengan baik, dan karena itu seluruh dunia terus bergerak.
Aset utama seorang programmer / programmer / insinyur perangkat lunak adalah pikiran yang bebas, terbuka, dan fleksibel.