Saya sebenarnya telah melalui refactoring yang cukup signifikan tiga kali dalam karir saya. Kode cenderung membusuk, jadi jika basis kode Anda cukup panjang, refactor besar tidak bisa dihindarkan. Semua contoh saya berada di pangkalan kode pribadi, yang mungkin menjelaskan mengapa contoh publik sulit ditemukan.
Pertama kali adalah aplikasi yang, percaya atau tidak, memiliki arsitektur dasar yang membuatnya hanya berfungsi dengan printer dot matrix. Ketika perusahaan saya tidak lagi dapat menemukan vendor untuk memasok pita, mereka menugaskan saya untuk membuatnya bekerja dengan printer laser.
Yang kedua adalah migrasi beberapa ratus skrip pengujian otomatis dari C ke Jawa, sebagian karena kami membutuhkan kemampuan lintas platform yang lebih baik, dan sebagian karena semakin sulit untuk mempekerjakan pengembang C baru.
Ketiga kalinya saya masih di tengah, yang memodulasi aplikasi monolitik besar untuk memungkinkan pengujian unit dengan mengurangi kopling, dan untuk tujuan lintas platform.
Saya membandingkan upaya untuk mendaki gunung. Anda memiliki tujuan besar di depan Anda, tetapi Anda tidak mengatasinya di tingkat makro. Anda mengambilnya satu pegangan pada satu waktu, selalu memiliki posisi mundur yang dekat, tidak pernah memutuskan keselamatan sebelumnya sampai yang berikutnya ada di tempat. Anda mulai hanya membuat sedikit peningkatan tambahan, dan setelah beberapa saat Anda berbalik dan tiba-tiba ada pemandangan yang indah ini.
Katakanlah Anda memiliki 60.000 file kode yang sangat berpasangan, misalnya. Anda ingin mulai meletakkannya di bawah unit test, tetapi dependensi membuatnya tidak mungkin. Bagaimana Anda memperbaikinya? Anda memisahkan satu file. Anda menambahkan tes otomatis. Anda kembali ke tanah stabil sebelum melanjutkan. Ulangi 59.999 kali.
Jika itu suara sederhana, bahwa karena itu adalah sederhana. Itu tidak mudah, tetapi sederhana. Sulit untuk melihat adanya kemajuan pada awalnya. Kami adalah dua tahun ke dalam apa yang tampaknya menjadi refactor mustahil, dan kemungkinan memiliki tahun di depan kami sampai kami selesai, tetapi melihat ke belakang kami tiba-tiba menyadari betapa jauh lebih baik kode sudah didapat, dan kami telah dapat terus memberikan fungsionalitas baru untuk pelanggan kami dalam waktu yang berarti.
Dua kali lainnya bekerja dengan cara yang sama. Anda menemukan langkah aman terkecil yang dapat Anda ambil, dan Anda mengambilnya, selalu menjaga aplikasi dalam kondisi kerja. Anda hanya mengkhawatirkan gambaran besar untuk memastikan Anda menuju ke arah yang benar. Semua tindakan Anda kecil, mantap, dan bertahap.