Apa saja Praktik Terbaik untuk refactoring dan penggantian nama di lingkungan tim? Saya membawa ini dengan beberapa skenario dalam pikiran:
Jika pustaka yang umumnya direferensikan dihidupkan kembali untuk memperkenalkan perubahan pada perpustakaan atau proyek apa pun yang merujuknya. Misalnya mengubah sewenang-wenang nama metode.
Jika proyek diganti nama dan solusinya harus dibangun kembali dengan referensi yang diperbarui.
Jika struktur proyek diubah menjadi "lebih teratur" dengan memperkenalkan folder dan memindahkan proyek atau solusi yang ada ke lokasi baru.
Beberapa pemikiran / pertanyaan tambahan:
Haruskah perubahan seperti ini atau apakah rasa sakit yang dihasilkan indikasi struktur menjadi serba salah?
Siapa yang harus bertanggung jawab untuk memperbaiki kesalahan terkait dengan perubahan yang melanggar? Jika pengembang membuat perubahan besar, apakah mereka harus bertanggung jawab untuk masuk ke proyek yang terkena dampak dan memperbaruinya atau haruskah mereka memberi tahu pengembang lain dan meminta mereka untuk mengubah sesuatu?
Apakah ini sesuatu yang dapat dilakukan berdasarkan jadwal atau itu sesuatu yang harus dilakukan sesering mungkin? Jika refactoring ditunda terlalu lama, semakin sulit untuk melakukan rekonsiliasi tetapi pada saat yang sama menghabiskan 1 jam peningkatan memperbaiki bangunan karena perubahan yang terjadi di tempat lain.
Apakah ini masalah proses komunikasi formal atau dapatkah itu organik?
sumber
Jawaban:
Setiap skenario yang Anda daftarkan berada di bawah kategori "API / kode yang dipublikasikan". Ini sulit untuk refactor, jadi orang tidak boleh mengubah apa pun dengan enteng. Sebaliknya, ia harus menegosiasikan perubahan yang direncanakan sebelumnya dengan semua pihak yang terlibat. Setidaknya masalah politik dan teknis.
Jadi saran utama mengenai hal ini dari Martin Fowler adalah jangan mempublikasikan antarmuka Anda (nama proyek dan struktur) sebelum waktunya .
Namun, jika sudah dilakukan dan perlu diperbaiki, mungkin lebih baik untuk mencoba melakukan perubahan yang diperlukan dalam langkah sesedikit mungkin, untuk meminimalkan gangguan dari pihak lain. Yang menyimpang cukup jauh dari konsep asli refactoring, tetapi untuk alasan yang bagus.
Juga, jika mungkin, pertimbangkan untuk menambahkan metode baru (sambil mencela yang sudah ada) alih-alih mengganti nama yang sudah ada. Ini memastikan bahwa kode klien tidak rusak, dan menyediakan masa transisi bagi mereka untuk memperbarui kode mereka untuk mematuhi API terbaru. Kekurangannya adalah itu mempersulit API Anda. Meskipun keadaan ini hanya sementara, namun mungkin butuh waktu yang cukup lama sebelum Anda dapat menghapus metode API yang usang secara aman (dalam kasus perpustakaan kelas Java, bertahun-tahun).
sumber
Anda hampir selalu dapat menghindari masalah ini dengan melakukan refactoring dalam dua langkah. Pada langkah pertama, perkenalkan kode baru, dan buang kode lama. Ketika semua tim telah bermigrasi ke kode baru, hapus kode lama. Saya juga menggunakan teknik ini untuk secara bertahap refactor satu modul. Dengan cara ini saya dapat membatasi jumlah kode yang harus diubah antara tes berjalan.
sumber
Perhatikan bahwa ini adalah salah satu alasan utama untuk memiliki server bangun, yang menjalankan tes.
Jika terjadi sesuatu yang akan merusak program yang diberikan, Anda diberitahu secepat mungkin dan dapat memburu pelakunya dan menyelesaikan masalah sementara detailnya masih segar.
sumber