Bagaimana aplikasi hybrid VB6 / .Net berfungsi di Dunia Nyata?

11

Saya memelihara aplikasi VB6 dan kami sedang mempelajari cara bermigrasi ke .Net Kami sedang mempertimbangkan untuk melakukan ini secara bertahap dengan mengimplementasikan fitur-fitur baru dalam kelas .Net yang terlihat oleh COM dan memigrasikan fungsi yang ada secara perlahan. Saya menemukan beberapa contoh instruktif 'Hello World' tentang cara melakukan ini dan berfungsi baik dengan Aplikasi kami. Tetapi bagaimana perilaku dunia nyata dari aplikasi hybrid ini? Apakah mereka stabil, dapat dipelihara? Khusus dari program kami adalah bahwa lebih banyak pengguna di komputer yang sama akan menggunakannya dengan beralih akun pengguna.

EDIT: Aplikasi VB6 membaca data dari koneksi USB dan menyimpannya dalam database Access. Pengguna dapat memanggil berbagai tampilan data. Data di-cache dalam perangkat perangkat keras, sehingga interupsi dalam pembacaannya tidak fatal.

EDIT 4 Okt 2015: Saatnya untuk tindak lanjut: Kami masih dalam proses mengganti kode VB6 yang ada langkah demi langkah ke .Net. Pertama kami mengambil rutinitas akses data, kemudian logika bisnis dan saat ini satu bentuk demi satu dikonversi ke WPF. Kami memang akhirnya menulis ulang setiap bagian dari kode yang kami konversi (dalam VB.Net), tetapi kami dapat melakukannya dengan lambat dan pada saat yang sama meningkatkan fungsionalitas. Aplikasi hibrida selamat dari transisi ke Windows 8, 8.1 dan 10.

EDIT 9 Maret 2018: Kami akan merilis kode yang sepenuhnya dikonversi bulan depan. Aplikasi hybrid akan didukung untuk setidaknya satu tahun lebih lama. Ini menunjukkan terutama masalah pada layar resolusi tinggi, tetapi berfungsi dengan baik sebaliknya. Sejujurnya, kami memiliki lebih banyak dukungan sakit kepala karena pemasangan .Net Framework yang korup dan instalasi dependensi yang korup (di antaranya SQL Server LocalDb) daripada yang kami miliki masalah kompatibilitas dengan basis kode VB6 ...

Dabblernl
sumber
1
Apa yang dilakukan aplikasi 'lawas'? beberapa detail lebih lanjut akan membantu dalam menjawab pertanyaan Anda.
Darknight
Tidak ada "koneksi USB" lebih dari yang Anda miliki "koneksi PCI." Kemungkinan besar Anda memiliki beberapa perangkat yang terhubung ke bus USB, dan jenis perangkat adalah poin penting.
Bob77

Jawaban:

5

Saya telah sukses memaparkan .NET ke VB6 melalui antarmuka COM. Dengan melakukan ini, pada awalnya kami dapat melakukan refactor sejumlah besar kode VB6 dan mengatur jalur peningkatan ke .NET. Hanya perlu diingat bahwa VB6 idiomatik tidak diterjemahkan dengan baik ke C # atau bahkan VB.NET sehingga Anda ingin melangkah dengan hati-hati.

Satu masalah yang kami miliki yang cukup mengganggu adalah jumlah pembangunan kembali yang berlebihan yang harus kami lakukan karena perubahan pada antarmuka COM publik. Ini diringankan oleh Visual Make .

Kekacauan Kekacauan
sumber
Terima kasih. Bisakah Anda menjelaskan lebih lanjut tentang masalah yang diselesaikan Visual Make. Saya tidak yakin saya mengerti.
Dabblernl
@Dabblernl - Visual Make memungkinkan Anda membuat proyek, yang merupakan kumpulan proyek VB6, dan itu akan membangunnya dalam urutan yang tepat.
ChaosPandion
6

FWIW, dalam pengalaman saya, kebutuhan untuk meningkatkan aplikasi VB6 ke .Net memberikan alasan ideal untuk menulis ulang. Kecuali coders asli adalah visioner yang brilian, teknik yang lazim di VB6 jarang port bersih ke .Net.

Beberapa kesenangan yang akan Anda temui:

  1. Anda akan berakhir dengan referensi ke Microsoft.VisualBasic yang benar-benar tidak Anda inginkan.
  2. Mereka akan menjadi bug yang sulit ditemukan, misalnya di mana substring VB6 (a, b, c) diam-diam dirender sebagai a. SubString (b, c) dan meledak di wajah Anda karena 1 berbasis di VB6 dan Berbasis 0 di .Net.
  3. Semua konversi implisit yang mudah dikodekan akan keluar dari kayu, biasanya pada PC pertama yang tidak memiliki "," sebagai pembatas daftar dan / atau "." sebagai pemisah desimal.
  4. Kelas Anda yang dikonversi tidak akan menyembunyikan data yang diinginkan yang harus didisain ulang oleh desain ulang.

HTH

nyengir
sumber
1
Anda membawa beberapa poin yang sangat bagus. Ini adalah beberapa alasan mengapa pass awal atas kode untuk menolak praktik buruk adalah suatu keharusan. Idealnya Anda akan memastikan Option Explicitdihidupkan dan semua ketergantungan pada konversi implisit ajaib dihapus.
ChaosPandion
Terima kasih telah menyemangati saya ;-) Tetapi saat ini, bukan itu yang ingin saya ketahui. Mimpi buruk pertobatan sejati masih akan datang.
Dabblernl
1
@chaos Benar. Sebenarnya saya mulai dengan Eksplisit dan ketika tidak ada kesalahan yang tersisa, saya dongkrak ke Strict, yang menyoroti banyak, banyak masalah bermanfaat
smirkingman
1
Saya telah mendengar tentang tim yang mengejar kode VB6 dengan penyembur api. Saya percaya bahwa alasan ini terjadi jauh lebih banyak untuk kode VB6 adalah bahwa begitu banyak "pengembang" VB tidak memiliki pengalaman pemrograman ketika mereka mulai. Ini pada gilirannya menciptakan segudang aplikasi yang dirancang dengan buruk dan berkode di alam liar untuk ditangani oleh generasi profesional ini.
It Grunt
1

Ini seharusnya bekerja dengan baik untuk Anda, tidak ada yang khusus tentang pergantian pengguna yang cepat / beberapa sesi yang dapat menyebabkan Anda mengalami masalah.

Dalam hal rawatan, perlu diingat bahwa hybrid VB6 / VB.NET seharusnya hanya menjadi solusi sementara: rencana Anda harus bermigrasi sepenuhnya ke VB.NET dari waktu ke waktu.

Dean Harding
sumber