Rumah >Java >javaTutorial >Bagaimanakah syarikat kami menghapuskan sepenuhnya 2,000 jika-lain dalam projek itu?
5 cara untuk mereka bentuk perisian yang lebih baik dan menggantikan If-Else. Contoh Permulaan kepada Lanjutan
Biar saya katakan ini: If-Else biasanya merupakan pilihan yang tidak baik.
Ia membawa kepada reka bentuk yang kompleks, kebolehbacaan kod yang lemah, dan boleh menyebabkan kesukaran dalam pemfaktoran semula.
Walau bagaimanapun, If-Else telah menjadi penyelesaian percabangan kod de facto, dan ia memang masuk akal. Ini adalah perkara pertama yang diajar kepada semua pemaju yang bercita-cita tinggi. Malangnya, ramai pembangun tidak pernah bergerak ke hadapan kepada strategi percabangan yang lebih sesuai.
Mantera sesetengah orang ialah: Jika-Lain adalah tukul, semuanya adalah paku.
Ketidakupayaan untuk memberitahu bila perlu menggunakan kaedah yang lebih sesuai adalah antara perkara yang membezakan junior dengan junior.
Saya akan menunjukkan kepada anda beberapa petua dan corak yang akan menamatkan amalan mengerikan ini.
Kesukaran bertambah dengan setiap contoh.
Ini mungkin salah satu dosa terbesar yang dilakukan oleh pembangun junior. Contoh di bawah ialah contoh hebat tentang perkara yang berlaku apabila anda diberitahu bahawa If-Else adalah hebat.
Hanya keluarkan blok else` untuk memudahkan proses ini.
Nampak lebih profesional kan?
Anda akan sering mendapati bahawa tiada blok lain sebenarnya diperlukan sama sekali. Seperti dalam kes ini, anda ingin melakukan beberapa tindakan dan kembali serta-merta jika syarat tertentu dipenuhi.
Jika anda memberikan nilai baharu kepada pembolehubah berdasarkan beberapa input yang disediakan, hentikan karut If-Else - pendekatan yang lebih mudah dibaca.
Semudah itu, memang payah. Pertama, If-Else boleh dengan mudah digantikan dengan suis di sini. Walau bagaimanapun, kita boleh memudahkan lagi kod ini dengan mengalih keluar kod lain sepenuhnya.
Jika lain tidak digunakan, kami ditinggalkan dengan kod yang boleh dibaca bersih. Ambil perhatian bahawa saya juga menukar gaya kepada pulangan cepat dan bukannya penyataan pulangan tunggal - tidak ada gunanya meneruskan ujian untuk nilai jika nilai yang betul telah ditemui.
Biasanya, saya dapati jika sesuatu kaedah memberikan nilai yang tidak sah, tidak masuk akal untuk meneruskan pelaksanaan.
Katakan kita mempunyai kaedah DefineGender dari sebelum ini, yang memerlukan nilai input yang diberikan mestilah sentiasa 0 atau 1.
Tidak masuk akal untuk melaksanakan kaedah tanpa pengesahan nilai. Oleh itu, kita perlu menyemak beberapa prasyarat sebelum membenarkan kaedah untuk meneruskan pelaksanaan.
Menggunakan teknik pengekodan pertahanan klausa pengawal, anda akan menyemak nilai input kaedah dan kemudian terus melaksanakan kaedah.
Pada ketika ini, kami memastikan bahawa logik utama hanya dilaksanakan apabila nilai berada dalam julat yang dijangkakan.
JIKA kini juga telah digantikan dengan ternary, kerana tidak ada lagi keperluan untuk lalai kepada "tidak diketahui" pada akhirnya.
Katakan anda perlu melakukan beberapa operasi yang akan memilih berdasarkan beberapa syarat, kami tahu bahawa kami perlu menambah lebih banyak operasi kemudian.
Mungkin sesetengah orang lebih suka menggunakan If-Else yang telah dicuba dan diuji. Jika anda menambah tindakan baharu, cuma tambah sesuatu yang lain. Sangat mudah. Walau bagaimanapun, pendekatan ini bukanlah reka bentuk yang baik dari segi penyelenggaraan.
Mengetahui bahawa kami perlu menambah operasi baharu kemudian, kami boleh memfaktorkan semula If-Else ke dalam kamus.
Kebolehbacaan telah dipertingkatkan dengan baik dan kodnya boleh disimpulkan dengan lebih mudah.
Perhatikan bahawa kamus diletakkan di dalam kaedah hanya untuk tujuan ilustrasi. Anda mungkin mahu menyediakannya dari tempat lain.
Ini adalah contoh yang lebih maju sedikit.
Ketahui bila hendak menghapuskan Ifs sepenuhnya dengan menggantikannya dengan objek.
Selalunya anda akan mendapati diri anda perlu melanjutkan beberapa bahagian permohonan anda. Sebagai pembangun junior, anda mungkin tergoda untuk melakukan ini dengan menambahkan pernyataan If-Else (iaitu else-if) tambahan.
Berikan contoh ilustrasi ini. Di sini kita perlu memaparkan contoh Pesanan sebagai rentetan. Pertama, kami hanya mempunyai dua perwakilan rentetan: JSON dan teks biasa. Menggunakan If-Else bukanlah masalah besar pada peringkat ini, jika kita boleh menggantikan yang lain dengan mudah, asalkan ia seperti yang dinyatakan sebelum ini.
Mengetahui bahawa kita perlu menskalakan bahagian aplikasi ini, pendekatan ini sama sekali tidak boleh diterima.
Kod di atas bukan sahaja melanggar prinsip "buka/tutup", tetapi juga tidak dibaca dengan baik dan boleh menyebabkan masalah kebolehselenggaraan.
Pendekatan yang betul ialah yang mengikut prinsip SOLID - kami melakukan ini dengan melaksanakan proses penemuan jenis dinamik (dalam kes ini corak Strategi).
Proses pemfaktoran semula proses yang tidak kemas ini adalah seperti berikut:
· Ekstrak setiap cawangan ke dalam kelas strategi yang berasingan menggunakan antara muka biasa
· Cari secara dinamik semua kelas yang melaksanakan antara muka biasa
· Tentukan strategi yang hendak dilaksanakan berdasarkan input
Kod untuk menggantikan contoh di atas adalah seperti berikut. Ya, ini lebih banyak kod. Ia memerlukan anda memahami cara penemuan jenis berfungsi. Tetapi aplikasi penskalaan secara dinamik ialah topik lanjutan.
Saya hanya tunjukkan bahagian tepat yang akan menggantikan contoh If-Else. Jika anda ingin melihat semua objek yang terlibat, lihat intipati ini.
Mari kita lihat kodnya.
Tandatangan kaedah kekal tidak berubah kerana pemanggil tidak perlu tahu tentang pemfaktoran semula kami.
Pertama, dapatkan semua jenis dalam pemasangan yang melaksanakan antara muka biasa IOrderOutputStrategy. Kemudian, kami mencipta kamus, nama paparanName pemformat ialah kunci dan jenisnya ialah nilai.
Kemudian pilih jenis pemformat daripada kamus dan cuba nyatakan objek dasar.
Akhir sekali, panggil ConvertOrderToString objek strategi.
Atas ialah kandungan terperinci Bagaimanakah syarikat kami menghapuskan sepenuhnya 2,000 jika-lain dalam projek itu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!