Sebelum buku Martin Fowler "Refactoring: Meningkatkan Desain Kode yang Ada" keluar, kami biasa memanggil perubahan besar untuk kode "rearchitecture" dan perubahan kecil "cleanup". IMO, teknik refactoring adalah semua akal sehat / hal-hal yang sudah jelas kita lakukan selamanya.
Apakah Anda pikir refactoring adalah sesuatu yang baru? Mungkin hanya cara untuk mengelabui manajemen agar mengalokasikan waktu untuk pembersihan kode?
design
refactoring
terminology
Chuck Stephanski
sumber
sumber
Jawaban:
Refactoring lebih tua dari bukit, jadi tidak, itu bukan sesuatu yang baru.
Dan refactoring tidak membersihkan. Ya, memang bisa, tetapi tidak terbatas pada pembersihan saja.
Ini menyesuaikan arsitektur aplikasi Anda (baik dalam skala besar atau kecil) sambil menjaga perilaku.
Itu berarti bahwa sementara beberapa bagian dari aplikasi Anda mungkin sudah sangat bersih dan baik-baik saja kemarin, fitur baru hari ini memerlukan penyesuaian bagian itu untuk mengakomodasi fitur baru.
Anda tidak ingin merusak fungsionalitas yang ada, jadi Anda menyesuaikan struktur aplikasi Anda sambil menjaga perilaku - yang merupakan refactoring.
Ini mengatakan apa pun perubahan yang dilakukan pada kode, seseorang harus selalu menjalankan tesnya ... untuk berjaga-jaga.
sumber
Itu hanya merapikan kode. Pada dasarnya, programmer (terutama Martin Fowler) memperhatikan bahwa mereka cenderung melakukan tugas yang sama setiap kali mereka merapikan kode mereka. Mereka mendefinisikan dan memberi label metode merapikan dan masalah kode terkait dan presto! Refactoring lahir.
Itu sama dengan pola desain - orang-orang memperhatikan bahwa mereka cenderung menggunakan pendekatan yang sama untuk masalah-masalah tertentu berulang kali. Mereka memberi label dan mendefinisikan pendekatan dan sekarang tampaknya Anda bukan programmer yang sebenarnya kecuali Anda hanya menggunakan selusin pola yang sama dalam kode Anda.
Tidak ada keajaiban untuk refactoring; itu hanya seperangkat jargon baru untuk menggambarkan praktik lama.
sumber
Kami melakukan tiga hal terpisah di perusahaan kami, dengan alokasi waktu untuk ketiganya:
Contoh: membelah metode 100 baris yang jelek dan tidak dapat dibaca yang melakukan empat hal menjadi empat metode yang dapat digunakan kembali, masing-masing 25 baris.
Contoh: menghapus kode yang dikomentari setelah memastikan bahwa kode ini tidak diperlukan lagi.
Contoh: menambahkan
Culture.Invariant
dalamstring.Format
(atau budaya lain yang lebih tepat).Jadi dalam kasus saya, refactoring adalah sesuatu yang sangat berbeda dari pembersihan . Saat melakukan pembersihan, saya tidak perlu menjalankan tes unit lagi: jika kode bekerja sebelumnya, itu akan berfungsi setelah pembersihan. Dengan kata lain, itu bukan karena saya menghapus baris kosong atau menambahkan komentar bahwa kode akan berhenti berfungsi. Di sisi lain, ketika saya refactor bagian rumit dari kode lama, saya bisa melakukan beberapa kesalahan, jadi saya harus menjalankan tes unit setelah refactoring.
sumber
Refactoring menambah pengetahuan ke kode Anda. Jika Anda tahu ada sesuatu yang salah namanya, Anda memberinya nama yang lebih baik. Jika Anda tahu sesuatu dapat dilakukan dengan lebih baik, Anda mengubahnya menjadi sesuatu yang lebih baik.
Banyak langkah - kecil dan besar - yang diharapkan menghasilkan program yang lebih baik.
sumber
Saya setuju dengan "refactoring adalah kata yang bagus untuk membersihkan kode Anda" tetapi tidak dengan "adil". Orang-orang menggunakan kata-kata mewah karena suatu alasan: kadang-kadang karena mereka ingin terlihat pintar, dan kadang-kadang karena mereka menyampaikan makna yang lebih besar atau lebih tepat, dan refactoring IMHO (bahkan jika kadang-kadang disalahgunakan) umumnya merujuk pada yang terakhir.
"Bersihkan" bisa berarti apa saja dari "memformat ulang sedikit" hingga "menulis ulang potongan besar".
"Refactoring" berarti secara khusus sesuatu seperti "perubahan inkremental kecil pada kode, yang dirancang untuk mempertahankan fungsi yang sama, sambil mengubahnya menjadi desain yang lebih baik". Dan ada kumpulan praktik terbaik tentang hal-hal yang Anda lakukan: beberapa bersifat ad-hoc, tetapi ada prinsip-prinsip umum, seperti menggunakan unit test, mengekstraksi sebagian fungsi ke dalam fungsi atau kelas baru, dll, yang dapat dan harus dipelajari oleh orang-orang. .
Anda mengatakan "hanya menipu manajemen agar mengalokasikan waktu untuk pembersihan kode". Tetapi jika mengatakan "refactoring" dengan benar menyampaikan konsep bahwa investasi yang mantap dalam kejelasan sekarang akan membayar dividen dalam efisiensi di masa depan, maka itu bukan "trik", itu komunikasi yang jelas dan efektif.
sumber
Refactoring adalah kode karena Normalisasi adalah data relasional. Ini adalah proses abstrak konsep menjadi representasi yang lebih bersih, lebih jelas dan lebih efisien dari peran mereka dalam aplikasi.
sumber
Itu tergantung bagaimana Anda memahami istilah refactoring. Bagi kebanyakan orang ini adalah proses meningkatkan struktur tanpa mengubah perilaku. Jika Anda setuju, maka ya itu dilakukan jauh sebelum buku ini keluar. Saya tahu, karena saya (di antara banyak hal lain) mengubah nama kelas, mengekstraksi kelas dan mengekstraksi metode sebelum buku itu ditulis. Saya tidak menyebutnya refactoring, tetapi pada dasarnya saya melakukan hal yang persis sama.
Bagi saya pribadi refactoring adalah apa yang sekarang orang sebut "refactoring kode otomatis" yaitu: dukungan untuk berbagai teknik refactoring di dalam IDE. Ini adalah peningkatan nyata dari apa yang saya lakukan sebelumnya (yang memang sangat menyakitkan). Saya dapat melakukan perubahan dalam satu kelas dan tidak khawatir bagaimana ini akan mempengaruhi sisa perangkat lunak. Saya pikir Martin memformalkan teknik refactoring hingga titik di mana ia dapat direpresentasikan sebagai algoritma dan dengan demikian diimplementasikan dalam berbagai IDE di luar sana.
Jadi jika Anda memahami refactoring sebagai suatu proses, maka itu bukan hal baru. Jika Anda melihatnya sebagai otomatisasi, maka ya ini adalah peningkatan besar. Cobalah mengganti nama beberapa kelas inti (secara harfiah, bukan melalui opsi refactoring IDE Anda) dalam proyek yang cukup besar untuk mengetahui alasannya :)
sumber
Refactoring memang kode "pembersihan", tetapi juga merestrukturisasi kode. Dalam tim saya, refactoring biasanya yang terakhir. Ketika kami memiliki kasus "refactor", kami mengalokasikan waktu untuk merestrukturisasi kode kami, misalnya untuk membuatnya selaras dengan arsitektur baru, atau model informasi, atau membuatnya lebih efisien.
Kode "pembersihan" adalah sesuatu yang kita lakukan terus menerus tanpa alokasi waktu khusus untuk itu. Bagi saya "pembersihan" biasanya berganti nama, membersihkan komentar, dll.
sumber
Saya akan mengatakan tidak
Mungkin ada pembersihan dalam proses refactoring tetapi itu bukan esensi.
Pembersihan datang dengan asumsi bahwa kode sebelumnya tidak bersih. Pada kenyataannya, pengembang memperbaiki kode mereka bahkan kode aslinya sudah bersih.
KERING adalah penggerak utama di balik refactoring.
Saat menambahkan kode baru ke basis kode yang ada, refactoring dilakukan secara alami karena prinsip KERING.
Hanya 0,02 saya
sumber
Membersihkan kode Anda seperti merapikan rumah Anda, refactoring seperti merobohkan dinding dan mungkin meletakkannya di tempat lain
sumber
Ketika orang lain membersihkan rumah Anda, Anda tidak dapat menemukan apa pun karena tujuannya adalah membereskan segala sesuatunya. Refactoring akan membangun dan memberi label kamar, lemari, lemari, rak, tempat sampah, dll. Itu masih menyimpan sebagian besar barang yang sama (Anda masih bisa membuat sandwich keju panggang di dapur dan memakannya di ruang tamu), tetapi harus membuatnya lebih mudah untuk menemukan dan mungkin memiliki tempat yang efisien untuk meletakkan hal-hal baru.
sumber
Istilah 'refactoring' secara elegan dipinjam dari aljabar. Ini berarti menyederhanakan ketentuan untuk menghasilkan hasil yang sama. Tidak hanya elegan, itu revolusioner - itu memerlukan pendekatan yang sulit hingga kode Anda, pada tingkat yang mengejutkan banyak orang. Dan istilah itu sendiri sangat penting dan bermanfaat.
sumber
Tidak. Refactoring memperbaiki struktur tanpa mengubah perilaku. Refactoring dalam arti ketat memerlukan disiplin tes yang baik. Itu belum tentu diperlukan ketika Anda "membersihkan".
sumber
Keduanya tumpang tindih sedikit di tepi, tetapi bagi saya itu perbedaan antara membersihkan rumah dan renovasi rumah. Pembersihan, bagi saya, tidak menyiratkan perubahan struktural, sedangkan refactoring tidak.
sumber
"Refactoring" benar-benar sama dengan "rearchitecture", tetapi dengan konotasi yang lebih kuat "tidak ada perubahan fungsi". Ini juga lebih jelas dalam hal tujuan arsitektur ulang, yang sering kali "faktor keluar" kode umum menjadi potongan yang dapat digunakan kembali.
sumber