Saya mulai dengan proyek VB6 beberapa tahun yang lalu (sistem ERP kustom perusahaan) dan saya perlahan-lahan telah memigrasikannya ke .NET. Itu sekitar setengah jadi.
Pertama-tama, mengkonversi dari VB6 ke VB.Net hampir selalu merupakan ide yang buruk (dan saya melakukan banyak penelitian tentang itu). Terlalu banyak perbedaan. Juga, jika bos Anda berpikir bahwa VB.Net adalah "sama seperti VB6" maka dia sepenuhnya salah dan Anda harus mengubah pandangannya dengan cepat.
Strategi saya adalah untuk menjaga dua basis kode terpisah dan memeliharanya secara terpisah dan kemudian perlahan-lahan memindahkan seluruh modul dari VB6 ke .NET tetapi hanya ketika ada perubahan signifikan yang akan terjadi pada modul itu, sehingga kami dapat mengamortisasi sebagian biaya. Meski begitu, menulis ulang adalah tugas besar yang mahal dan berisiko.
Ada dua cara untuk mengintegrasikan VB6 yang ada dengan kode .NET baru (dan Anda mungkin akan melakukan itu untuk waktu yang sangat lama, jadi sebaiknya Anda terbiasa dengan ide itu). Cara pertama yang saya lakukan adalah mulai menulis modul kecil di .NET dan kemudian memiliki aplikasi VB6 utama meluncurkan .NET dieksekusi lewat beberapa parameter baris perintah. Ini berhasil, tetapi berhati-hatilah bahwa .NET memiliki waktu mulai start dari 4 hingga 10 detik, sehingga Anda terbatas pada apa yang dapat Anda lakukan dengan cara ini.
Setelah mulai terasa sangat menyakitkan, saya membalik strategi dan menggunakan metode dari artikel CodeProject ini untuk menampilkan formulir VB6 yang ada di aplikasi .NET utama saya. Setelah saya melewati rute ini, saya hanya bisa mengeluarkan satu waktu .NET startup, dan menggunakan ClickOnce untuk penyebaran, yang merupakan anugerah dibandingkan dengan bagaimana aplikasi VB6 dikerahkan sebelumnya.
Yang mengatakan, inilah keuntungan yang saya temukan di .NET lebih dari VB6:
- Kerangka kerja ketekunan yang lebih baik (NHibernate, EntityFramework, Linq2Sql dll.)
- LINQ (Saya tidak bisa cukup menekankan betapa pentingnya hal ini)
- Generik!
- Sintaks Lambda (memecahkan seluruh kelas masalah seperti "hole in the middle" dengan elegan)
- Demikian
Action
dan Func
jenis
- Refleksi (sesuatu yang jarang Anda gunakan, tetapi ketika Anda melakukannya sangat besar)
- Dukungan pengujian unit jauh lebih baik (tentu saja, saya ragu Anda akan meyakinkan karyawan Anda yang lain untuk pengujian unit, tetapi Anda harus)
- ReSharper (dan alat refactoring / profiling lainnya) (10x lebih baik dari MZ-Tools)
- ClickOnce dan / atau Setup / Installer Projects
- Proyek Layanan Windows
- Dukungan berorientasi objek yang sebenarnya (VB6 didasarkan pada COM dan sangat buruk dalam dept ini.)
- Pengetikan statis
- Dipanggang dalam dukungan XML
- WPF dan Formulir Windows (Kontrol VB6 sangat terbatas)
- WCF
- Banyak lagi contoh kode online
- Pengecualian (penanganan kesalahan VB6 benar-benar mengerikan jika dibandingkan)
- Integrasi kontrol sumber Visual Studio
Decimal
tipe (VB6 tidak pernah memiliki tipe desimal kelas satu, meskipun memiliki CDec)
- Dukungan kelas satu untuk
Guid
- Dukungan kelas satu untuk bilangan bulat 64-bit
- Perpustakaan koleksi yang lebih baik
- ReportViewer
- Multithreading, pustaka paralel tugas
Kerugian VB6:
- Anda akan melihat kinerja itu. Mungkin tidak cukup untuk dikhawatirkan, tapi percayalah, Anda akan menyadarinya. VB6 mengkompilasi ke kode asli setelah semua.
Agar adil, berikut adalah beberapa kelemahan mempertahankan solusi gabungan VB6 / .NET:
- Mempertahankan dua lapisan akses data (dengan asumsi aplikasi VB6 Anda sebenarnya memiliki satu)
- Kabel ekstra untuk mengekspos layanan / formulir / dll. dari satu sisi ke sisi lain
- Dua kali lipat kompleksitas / arsitektur yang ada di kepala Anda
Sekarang, seperti yang Anda mengisyaratkan, Anda benar-benar harus membangun kembali arsitektur Anda dari bawah ke atas jika Anda mulai menulis kode dalam .NET. Namun, sepertinya tidak ada orang di perusahaan Anda yang akrab dengan dunia pemrograman .NET dan / atau Java, yang merupakan asal banyak pola dan praktik yang umum bagi kerangka kerja perusahaan besar.
Jika Anda mengambil seseorang yang terbiasa menyeret tombol pada formulir, mengklik dua kali pada itu, dan menulis beberapa string SQL langsung di pengendali event klik, dan itu telah bekerja untuk mereka, sangat sulit untuk membuat mereka melihat keuntungan mengikuti SOLID prinsip desain. Di sisi lain, jika Anda menggigit peluru dan memutuskan bahwa semua kode baru akan tercakup 90% atau lebih besar dengan tes unit otomatis, maka Anda akan segera menyadari bahwa itu sangat sulit dilakukan kecuali jika Anda mengadopsi prinsip-prinsip desain SOLID.
Jadi, Anda harus benar-benar melihat kenyataan situasi. Dalam kasus saya, saya adalah satu-satunya programmer, dan saya bertekad untuk membuat semua kode baru diuji unit, meskipun saya tidak punya pengalaman dengannya. Saya tidak bisa cukup menekankan betapa ini berdampak negatif pada apa yang bisa saya lakukan pada minggu pertama, bahkan bulan-bulan pertama. Namun, saya bertekad untuk melakukannya, dan saya menerima dukungan dari manajemen. Kebanyakan orang tidak memiliki kemewahan itu. Sekarang saya punya banyak kode dan saya baru saja menyelesaikan refactoring besar dengan hampir tidak ada masalah.
Secara realistis, Anda tidak akan melakukan tes unit, yang berarti lebih sulit untuk membenarkan prinsip-prinsip seperti injeksi ketergantungan kepada rekan satu tim Anda. Anda harus menjual .NET pada manfaat selain manfaat arsitektur. Anda harus fokus pada dukungan perpustakaan yang lebih baik dan alat yang lebih baik. Itulah satu-satunya hal yang akan beresonansi. Saya akan menyarankan yang berikut dalam demo Anda:
- Buat proyek Windows Forms (menjauh dari WPF dan xaml - ini terlalu mengejutkan)
- Terhubung ke database SQL (beberapa database uji)
- Gunakan Linq2Sql atau EntityFramework untuk menghasilkan model data untuk itu
- Buat kelas repositori yang memiliki metode untuk mengembalikan beberapa daftar entitas
- Tulis kueri dalam metode itu menggunakan LINQ, tunjukkan intellisense
- Tunjukkan bahwa LINQ bekerja pada semua objek, bukan hanya entitas
- Tunjukkan bahwa jika Anda mengubah database dan membuat ulang model, Anda mendapatkan kesalahan kompilasi
- Jatuhkan
DataGridView
di jendela utama
- Peragakan penyatuan data dengan mengisi kisi-kisi dengan entitas dari repositori
- Tunjukkan semua hal keren tentang grid yang jauh lebih baik daripada VB6
- Buat file .rdlc (laporan)
- Buat laporan sederhana di dalam Visual Studio
- Jatuhkan penampil laporan di jendela dan render laporan di dalam penampil laporan
- (Jelas Anda perlu ReportViewer diinstal dan sudah melakukan semua ini terlebih dahulu)
- Munculkan masalah "hole in the middle" dan kemudian tunjukkan pemecahannya dengan membuat metode yang menggunakan
Action
parameter. Lakukan ini terlebih dahulu dengan melewati metode lain sebagai parameter, dan kemudian meniup pikiran mereka dengan melewati delegasi anonim menggunakan sintaks lambda
- Menunjukkan generik dengan menggunakan
List<T>
dan Dictionary<T1,T2>
koleksi kelas dan menunjukkan bagaimana menciptakan kuat kode diketik (VB6 memiliki hal serupa, tapi itu dinamis diketik)
- Tulis
foreach
loop yang memalukan paralel, gunakan System.Diagnostics.Stopwatch
untuk mengukur waktu yang diperlukan untuk mengeksekusi, kemudian gunakan pustaka paralel tugas untuk mengubah loop menjadi Parallel.Foreach
loop dan perlihatkan kecepatan, dengan asumsi Anda menggunakan mesin multi-core.
- Tunjukkan kemampuan untuk menambahkan penangan pengecualian global (ini adalah sesuatu yang tidak bisa dilakukan VB6)
Itu yang akan saya lakukan.