Saya memiliki tanggung jawab untuk situs web besar berbasis Asp.Net. Saat ini situs web (bukan aplikasi web), beberapa layanan windows dan sejumlah perpustakaan kelas.
Lapisan data menggunakan campuran LLBLGen dan Linq Untuk LLBGen, serta sejumlah contoh dari warisan inline SQL yang belum refactored.
Ada beberapa implementasi tipe manajer, tetapi dalam banyak kasus aplikasi ini menunjukkan Smart UI anti-pola (yaitu terlalu banyak logika bisnis dalam kode di belakang kelas)
Situs ini memiliki lalu lintas yang cukup tinggi, dan kinerjanya baik-baik saja, tetapi kami mengembangkan kemampuan pengembangan kami menjadi tim yang terdiri dari sekitar 10 orang, dan semakin jelas kami membutuhkan desain berlapis yang menyeluruh di atas middleware yang ada.
Pertanyaan saya adalah dari mana harus memulai? Kami memiliki 10 tahun kode (beberapa di antaranya masih benar-benar hanya memigrasi ASP Classic), banyak pendekatan, dan gaya yang berbeda.
Refactoring seluruh basis kode tidak realistis dan, mungkin tidak diinginkan
Saya tahu ini bukan situasi yang baru, apakah ada ide atau konsep yang berguna tentang bagaimana mendekati masalah ini?
sumber
Jawaban:
Saya juga telah bekerja dalam situasi yang sama dan saya dapat memberi Anda saran berikut.
sumber
Anda benar bahwa refactoring seluruh basis kode tidak diinginkan. Refactoring adalah sesuatu yang Anda lakukan sebelum pengembangan baru untuk membuat pengembangan menjadi lebih lancar. Jika Anda tidak berencana untuk memodifikasi semua kode dalam basis kode Anda, refactoring akan membuktikan penggunaan waktu yang tidak efisien.
Beberapa saran selain apa yang dikatakan Sklivvz:
Pisahkan kode menjadi bagian yang sering dan jarang dimodifikasi. Hanya bagian yang sering diubah yang perlu dibawa sepenuhnya ke arsitektur baru. Integrasikan kode yang jarang dimodifikasi dengan arsitektur baru menggunakan perubahan sesedikit mungkin (atau tidak ada perubahan jika Anda dapat melakukannya). Tahan godaan penulisan ulang penuh, biayanya akan lebih banyak daripada yang Anda dapatkan dari itu. Hargai bahwa kode yang ada berfungsi, meskipun jelek.
Cari tahu apa tujuan refactoring Anda. Apakah Anda ingin membuatnya lebih mudah untuk memasukkan konten ke situs? Apakah Anda memiliki banyak bug dan ingin meningkatkan kualitas yang dirasakan pengguna? Apakah Anda malah ingin mengurangi waktu pengembangan fitur? Atau apakah Anda terutama menginginkan UX yang lebih baik? Arsitektur Anda harus membuatnya mudah untuk memperbaiki kode untuk memenuhi tujuan yang Anda tetapkan. Jangan pernah lupa bahwa penerima manfaat utama dari refactoring Anda haruslah pengguna / pelanggan / bisnis Anda. Kode bersih bukanlah tujuan dengan sendirinya, ini adalah metode untuk mencapai tujuan, dan akhirnya melibatkan pengguna.
Cobalah untuk menemukan sebanyak mungkin arsitektur referensi dan jangan takut untuk menyalinnya. Jangan menemukan kembali roda. Jika orang lain memiliki arsitektur yang berfungsi baik untuk situs seperti milik Anda, belajarlah dari sana.
Pikirkan tentang sisi manajemen orang. Dalam proyek migrasi saya sendiri, bagian tersulit adalah membuat orang mempelajari cara-cara baru dan menaatinya. Anda akan memerlukan implementasi referensi, dan cara mengajarkan arsitektur kepada semua orang di tim (baik lama dan baru). Untuk mengurangi penolakan terhadap perubahan, mintalah masukan dari semua orang di tim sebelum membuat keputusan. Pastikan bahwa desain baru benar-benar meningkatkan hal-hal dari sudut pandang pribadi pengembang, dan bukan lompatan besar yang mereka rasakan dari kedalaman mereka.
sumber
Hal paling penting yang saya lihat ketika mencoba berurusan dengan basis kode lama adalah TIDAK terus mengubah untuk apa Anda memotret. Artinya, cari tahu arsitektur yang Anda inginkan, kemudian STICK DENGAN RENCANA ITU! Salah satu masalah besar posisi terakhir saya adalah bahwa basis kode memiliki beberapa ide yang berbeda dari apa yang akan terlihat dari waktu ke waktu. Setiap kali ide baru dicoba, beberapa kode dikonversi, beberapa tidak, dan kemudian orang lain memiliki ide 'lebih baik'. Itu menjadi semakin tidak koheren dari waktu ke waktu dan akhirnya dihapus.
sumber
Ada buku / pdf gratis yang sangat bagus tentang rekayasa ulang perangkat lunak warisan: http://scg.unibe.ch/download/oorp/
Dikatakan OO dalam judul tetapi sebagian besar ide berlaku untuk perangkat lunak apa pun. Bab ini membahas mulai dari mana, bagaimana menangani berbagai bagian sistem yang berbeda selama restrukturisasi dan lebih banyak lagi topik-topik tersebut.
sumber
Jika tidak memiliki arsitektur yang koheren, itu karena manajemen tidak mengerti / peduli tentang masalah tersebut. Hanya kode saja. Anda harus memperkenalkan arsitektur baru yang baik saat Anda menulis kode baru.
Anda harus merancang ulang hal-hal hanya jika mereka mulai memiliki bug yang sangat serius, Anda perlu memperpanjangnya dan tidak bisa, atau tidak sesuai dengan persyaratannya.
Saya pada dasarnya mengatakan hanya peduli tentang masalah yang benar-benar diperhatikan oleh manajer Anda, bukan masalah yang akan mereka pedulikan jika mereka memiliki pengetahuan Anda.
Jika Anda dapat menjual arsitektur ulang ke manajemen, mulailah dengan pengujian. Jika mereka tidak ingin berinvestasi dalam pengujian, usaha Anda hanya akan membuat Anda kesulitan.
sumber