Bagaimana tidak mengembangkan proyek di Bitrix

Untuk semua waktu pekerjaan saya dengan Bitrix, saya memiliki kesempatan untuk bekerja dengan sejumlah besar proyek yang dikembangkan seseorang sebelum saya. Berikut adalah beberapa perbaikan kecil, perbaikan berbagai bug dan kesalahan logika, desain ulang situs web, dan perubahan global terhadap fungsionalitas yang ada. Dan, seperti pengembang lainnya, saya benci untuk menyapu sampah, kruk, dan tambalan "sementara" orang lain, yang sebenarnya diingat oleh 8 edisi produk lainnya.

Di sini saya akan mencoba untuk tidak fokus pada standar "praktik terburuk" ketika pemrograman dalam PHP, seperti mengabaikan pilihan nama variabel dan fungsi, permintaan basis data yang tidak perlu dalam satu lingkaran, kurangnya pemeriksaan data pengguna dalam bentuk, mengabaikan komentar dan sejenisnya. Saya akan mencoba menyentuh tepat saat-saat yang melekat dalam pengembangan pada Bitrix, yang selanjutnya akan memungkinkan untuk menghindari kemarahan dan kutukan terhadap Anda dari programmer yang harus menemani kode Anda. Dan ya, sering kali Anda akan menjadi pemrogram ini sendiri dalam setahun, atau lebih, ketika Anda benar-benar lupa mengapa Anda memasukkan kruk ini atau itu di sini.
β€œTulis kode seolah-olah itu akan disertai oleh psikopat kejam yang tahu di mana Anda tinggal” (c) John F. Woods
Yang pertama, dan sebagian besar, menurut saya, penting - demi Tuhan, gunakan folder lokal . Ini sangat penting saat menggunakan sistem kontrol versi - yang perlu Anda lakukan adalah menambahkan folder / bitrix ke pengecualian. Itu saja. Lebih lanjut, hampir semua pengembangan hanya dilakukan di dalamnya. Ini sangat menyederhanakan pencarian file dan komponen yang diperlukan di kemudian hari, membantu untuk tidak menyumbat repositori dengan file yang tidak perlu, dan memang - itu membuat pohon proyek menjadi lebih rapi, "manusia".

Jangan modifikasi kernel . Bahkan jika Anda yakin itu tidak akan diperbarui. Meskipun lebih cepat. Bahkan jika kamu malas. Lupakan pemikiran ini seperti mimpi buruk. Jika Anda perlu mengubah logika komponen standar, transfer ke ruang nama baru / lokal / komponen / ubah / dan bekerja dengannya. Hal yang sama berlaku untuk modul, gadget, dan aktivitas proses bisnis.

Jangan membuang file init.php . Menggabungkan fungsi untuk bekerja dengan modul tertentu atau fungsional dalam suatu kelas, menulis seluruh kelas ini ke dalam file terpisah, dan di init.php cukup sertakan file-file ini dan menulis event handler. Saya bertemu file init.php masing-masing 500Kb, di mana fungsi, definisi konstanta, kelas dan inisialisasi handler dicampur menjadi berantakan. Tentu saja, ketika saya harus memahami file-file ini, saya mengutuk pendahulu saya.

Paragraf berikutnya tidak membahas kasus pengembangan solusi yang sudah jadi untuk Marketplace, ketika tujuannya adalah untuk membuat fungsionalitas yang paling dapat disesuaikan dari bagian publik untuk pengguna akhir. Jika Anda bekerja pada proyek tertentu, pada ToR tertentu - jangan mencoba membuat templat terpadu untuk komponen untuk semua kesempatan . Secara pribadi, saya berpegang pada filosofi - lebih baik memiliki beberapa templat sederhana yang digunakan untuk tujuan yang berbeda dari yang universal, tetapi di mana iblis akan mematahkan kakinya nanti. Tentu saja, dalam setiap kasus, Anda perlu membangun apa - persyaratan referensi, opsi implementasi, dan sejenisnya, tetapi Anda tidak boleh lupa tentang Pisau Cukur Occam. Sebagai contoh, saya akan memberikan satu proyek perusahaan leasing, yang kebetulan saya sunting. Proyek itu sendiri, tentu saja, dilaksanakan dengan mengerikan, yang mengerikan, itu ada di halaman bagian dari katalog layanan. Masing-masing dari lima bagian memiliki tata letak sendiri, di mana kedua posisi blok pada halaman dan, pada prinsipnya, kehadiran beberapa dari mereka berbeda. Dan untuk semua lima halaman, satu template digunakan dengan sekelompok if-else, duplikasi panggilan komponen, menghubungkan gaya dan skrip, yang, lebih lanjut, secara berkala saling bertentangan satu sama lain. Akibatnya - file besar untuk memahami "tanpa pint" adalah seperti kematian. Meskipun, tampaknya, apa yang mencegah Anda membuat 5 templat berbeda dan tidak membuat kesulitan tiba-tiba?

Gunakan API . Jangan menemukan kembali roda di tempat yang tidak dibutuhkan. Gunakan dokumentasi - seluruh produk dijelaskan dengan cukup baik, dan juga setiap fungsi dapat dilihat secara detail di bxapi.ru.

Hindari permintaan basis data langsung . Ini adalah kasus khusus dari paragraf sebelumnya - gunakan API. Tergesa-gesa, permintaan tidak aman dapat menyebabkan data korupsi, kehilangan atau bahkan kompromi.

Jangan menggunakan komponen CNC dari akar situs . Konsekuensinya, sebagai suatu peraturan, agak menyedihkan, karena CNC menggunakan file penangan alamat, upaya untuk menggunakannya dari root dengan mudah memecah alamat komponen lain, serta 404 halaman. Tidak akan ada salahnya jika artikel yang Anda miliki ditujukan ke / artikel / folder, dan produk relatif ke / katalog /.

Hubungkan css dan js menggunakan API. Saya masih melihat skrip dan stylesheet menggunakan tag html di mana-mana. Gunakan objek kelas \ Bitrix \ Main \ Page \ Asset dan fungsi addJs () dan addCss (). Ini akan memungkinkan menggabungkan file dan, selanjutnya, menyimpannya dengan satu klik pada kotak centang di pengaturan modul utama

Dan akhirnya, kesalahan tidak hanya menyangkut Bitrix, tetapi sudah terlalu menyakitkan bagi saya untuk menemukan masalah yang terkait dengannya. Periksa batal array dengan hasil seleksi . Sebagai contoh, terakhir kali saya menemukan masalah ini adalah ketika bekerja dengan satu toko online. Keluhan: halaman terkadang dimuat selama 16 detik. Apa yang terhubung dengan tidak jelas. Dengan coba-coba, saya menemukan bahwa halaman dimuat tidak senonoh hanya ketika keranjang kosong. Sepertinya, mengapa? Ternyata, jendela pop-up muncul di keranjang ketika melayang, di mana gambar barang yang dimasukkan ke dalam keranjang ditampilkan. Nah, apa yang dilakukan pengembang sebelumnya? Saya mengambil hasil dari komponen "keranjang kecil" dan dalam file result_modifier.php saya membuat panggilan ke GetList () barang untuk memilih gambar dengan filter dari array ID produk, kemudian menambahkan gambar src dari hasil seleksi ke array produk yang sesuai. Akibatnya, ketika tidak ada barang di keranjang, filter dibiarkan kosong, dan katalog barang WHOLE masuk ke dalam pilihan. Nah, kemudian siklus untuk masing-masing dan ... kita memiliki apa yang kita miliki. Jelas bahwa pada tahap pengembangan dengan produk uji 15 ini tidak terlihat, dan masalah muncul sudah dalam kondisi pertempuran. Meskipun kelihatannya layak melakukan cek kosong ($ arResult ['ITEMS]]) ...

Di sinilah saya mengakhiri "praktik terburuk" pribadi saya terkait pengembangan Bitrix. Jika setidaknya seseorang informasi ini akan membantu untuk menghindari kesalahan di masa depan dan meningkatkan gaya pengembangan mereka, maka itu tidak sia-sia.

Source: https://habr.com/ru/post/id418245/


All Articles