Memulai arsitektur yang koheren dalam aplikasi warisan

11

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?

Matt Evans
sumber
1
Artikel "tidak diinginkan", adalah penulisan ulang dari awal bukan dia refactor segalanya. Dan Anda ingin memperbaiki segala hal.
Raynos

Jawaban:

20

Saya juga telah bekerja dalam situasi yang sama dan saya dapat memberi Anda saran berikut.

  1. Anda perlu mengurangi hutang teknis . Sekarang. Mengapa? Karena utang teknis seperti utang finansial. Anda akan membayar bunga untuknya.
  2. Karena refactoring seluruh basis kode tidak layak, tanyakan pada diri Anda: apa yang mencegahnya? Apakah ini terlalu banyak bekerja? Mengapa?
  3. Buat rencana untuk mengurangi utang teknis tepat waktu. Sebagai contoh, dengan menetapkan aturan sebagai " setiap bit kode yang disentuh oleh tim harus diperbaiki / dire-refored ke standar baru ". Biasanya: tes unit harus ditulis, kode harus dipindahkan di lapisan yang benar, dll. Ini memungkinkan Anda untuk memperbaiki banyak kode tanpa menggunakan proyek "refactoring" yang sangat mahal dan bernilai rendah.
  4. Bungkus omong kosong. Decoupling adalah kunci untuk refactoring dan arsitektur yang baik. Jika Anda dapat mempartisi basis kode, Anda mungkin dapat memperbaiki bit yang lebih kecil.
  5. Jangan meningkatkan utang teknologi lebih lanjut. Jangan meningkatkan utang teknologi lebih lanjut. Jangan meningkatkan utang teknologi lebih lanjut. Tidak...
Sklivvz
sumber
4
+1 tidak meningkatkan utang teknologi lebih lanjut.
Raynos
1
Terima kasih - telah menggali konsep utang teknis. Cara yang sangat berguna untuk memikirkannya. Semua saran bagus (terutama 3)
Matt Evans
1
Saya sangat suka: "setiap bit kode yang disentuh oleh tim harus diperbaiki / di refactored ke standar baru" bagian. Saya sering membandingkan pengembangan seperti berkemah: "Tinggalkan tempat perkemahan Anda lebih bersih daripada yang Anda temukan"
Gertjan
6

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Joeri Sebrechts
sumber
2

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.

Michael Kohne
sumber
Saran yang bagus. Saya pikir kuncinya jelas mencari tahu arsitektur yang diinginkan. Pergi untuk menjadwalkan beberapa pertemuan untuk membahas dan menyetujui suatu pendekatan.
Matt Evans
1

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.

Patrick
sumber
1

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.

Joe
sumber