Tôi đã bắt đầu với một dự án VB6 vài năm trước (hệ thống ERP tùy chỉnh của công ty) và tôi đã dần dần chuyển nó sang .NET. Nó ở đâu đó khoảng một nửa.
Trước hết, chuyển đổi từ VB6 sang VB.Net hầu như luôn là một ý tưởng tồi (và tôi đã nghiên cứu rất nhiều về điều đó). Có quá nhiều khác biệt. Ngoài ra, nếu sếp của bạn nghĩ rằng VB.Net "giống như VB6" thì anh ta hoàn toàn nhầm lẫn và bạn phải thay đổi cách nhìn của anh ta thật nhanh.
Chiến lược của tôi là giữ hai cơ sở mã riêng biệt và duy trì chúng một cách riêng biệt và sau đó từ từ chuyển toàn bộ các mô-đun từ VB6 sang .NET nhưng chỉ khi có một thay đổi đáng kể sắp xảy ra với mô-đun đó, vì vậy chúng tôi có thể khấu hao một phần chi phí. Mặc dù vậy, viết lại là một nhiệm vụ lớn và tốn kém.
Có hai cách để tích hợp VB6 hiện tại với mã .NET mới (và có lẽ bạn sẽ thực hiện điều đó trong một thời gian rất dài, vì vậy bạn nên làm quen với ý tưởng này). Cách đầu tiên tôi đã làm là bắt đầu viết các mô-đun nhỏ trong .NET và sau đó ứng dụng VB6 chính khởi chạy .NET thực thi chuyển qua một số tham số dòng lệnh. Điều này đã hoạt động, nhưng được cảnh báo rằng .NET có thời gian khởi động từ 4 đến 10 giây, vì vậy bạn bị giới hạn trong những gì bạn có thể làm theo cách này.
Khi nó bắt đầu trở nên thực sự đau đớn, tôi đã lật chiến lược và sử dụng phương thức từ bài viết CodeProject này để hiển thị các biểu mẫu VB6 hiện có trong ứng dụng .NET chính của tôi. Khi tôi đi xuống tuyến đường này, tôi chỉ có thể phải chịu một lần nhấn .NET thời gian khởi động và sử dụng ClickOnce để triển khai, đây là một ưu đãi so với cách ứng dụng VB6 đã được triển khai trước đó.
Điều đó nói rằng, đây là những lợi thế tôi tìm thấy trong .NET so với VB6:
- Các khung kiên trì tốt hơn (NHibernate, EntityFramework, Linq2Sql, v.v.)
- LINQ (Tôi không thể nhấn mạnh đủ tầm quan trọng của việc này)
- Thế hệ!
- Cú pháp Lambda (giải quyết cả một lớp các vấn đề như "lỗ ở giữa" một cách thanh lịch)
- Tương tự
Action
và Func
các loại
- Reflection (thứ mà bạn hiếm khi sử dụng, nhưng khi bạn làm nó rất lớn)
- Hỗ trợ kiểm tra đơn vị tốt hơn nhiều (tất nhiên, tôi nghi ngờ bạn sẽ thuyết phục các nhân viên khác của mình kiểm tra đơn vị, nhưng bạn nên)
- ReSharper (và các công cụ tái cấu trúc / lược tả khác) (tốt hơn 10 lần so với MZ-Tools)
- ClickOnce và / hoặc Thiết lập / Cài đặt dự án
- Dự án dịch vụ Windows
- Hỗ trợ hướng đối tượng thực sự (VB6 dựa trên COM và thực sự tệ trong phòng này.)
- Gõ tĩnh
- Nướng trong hỗ trợ XML
- WPF và Windows Forms (các điều khiển của VB6 rất hạn chế)
- WCF
- Nhiều ví dụ mã trực tuyến
- Các trường hợp ngoại lệ (xử lý lỗi của VB6 là hoàn toàn khủng khiếp khi so sánh)
- Tích hợp kiểm soát nguồn của Visual Studio
Decimal
loại (VB6 không bao giờ có loại thập phân hạng nhất, mặc dù nó có CDec)
- Hỗ trợ hạng nhất cho
Guid
- Hỗ trợ hạng nhất cho số nguyên 64 bit
- Thư viện bộ sưu tập tốt hơn
- Trình xem báo cáo
- Đa luồng, thư viện tác vụ song song
Nhược điểm của VB6:
- Bạn sẽ nhận thấy một hiệu suất nó. Nó có thể không đủ để lo lắng, nhưng tin tôi đi, bạn sẽ nhận ra điều đó. VB6 biên dịch thành mã gốc sau khi tất cả.
Công bằng mà nói, đây là một số nhược điểm của việc duy trì giải pháp VB6 / .NET kết hợp:
- Duy trì hai lớp truy cập dữ liệu (giả sử ứng dụng VB6 của bạn thực sự có một lớp)
- Thêm dây để lộ các dịch vụ / hình thức / vv. từ bên này sang bên kia
- Hai lần phức tạp / kiến trúc để giữ trong đầu của bạn
Bây giờ, như bạn đã gợi ý, bạn thực sự phải xây dựng lại kiến trúc của mình từ đầu nếu bạn bắt đầu viết mã bằng .NET. Tuy nhiên, có vẻ như không ai trong công ty của bạn quen thuộc với thế giới lập trình .NET và / hoặc Java, nơi có rất nhiều mô hình và thực tiễn phổ biến đối với các khung công tác doanh nghiệp lớn.
Nếu bạn lấy ai đó đã từng kéo nút trên biểu mẫu, nhấp đúp vào nút đó và viết một số chuỗi SQL trực tiếp trong trình xử lý sự kiện nhấp chuột và điều đó rất hiệu quả với họ, thật khó để làm cho họ thấy lợi thế khi theo dõi RẮN nguyên tắc thiết kế. Mặt khác, nếu bạn cắn viên đạn và quyết định rằng tất cả các mã mới sẽ được bao phủ 90% hoặc cao hơn bằng các thử nghiệm đơn vị tự động, thì bạn sẽ nhanh chóng nhận ra rằng điều đó thực sự khó thực hiện trừ khi bạn áp dụng các nguyên tắc thiết kế RẮN.
Vì vậy, bạn cần phải có một cái nhìn thực sự khó khăn về thực tế của tình huống. Trong trường hợp của tôi, tôi là lập trình viên duy nhất và tôi đã xác định rằng tất cả mã mới sẽ được kiểm tra đơn vị, mặc dù tôi không có kinh nghiệm với nó. Tôi không thể nhấn mạnh đủ mức độ ảnh hưởng tiêu cực này đến những gì tôi có thể làm trong tuần đầu tiên, thậm chí là những tháng đầu tiên. Tuy nhiên, tôi đã quyết tâm làm điều đó và tôi đã mua lại từ ban quản lý. Hầu hết mọi người không có sự sang trọng đó. Bây giờ tôi có rất nhiều mã và tôi vừa hoàn thành một phép tái cấu trúc lớn mà hầu như không có vấn đề gì.
Trên thực tế, bạn sẽ không thực hiện các bài kiểm tra đơn vị, điều đó có nghĩa là khó biện minh cho các nguyên tắc như tiêm phụ thuộc vào các đồng đội của bạn. Bạn sẽ phải bán .NET dựa trên những lợi ích khác ngoài lợi ích kiến trúc. Bạn phải tập trung vào hỗ trợ thư viện tốt hơn và các công cụ tốt hơn. Đó là điều duy nhất sẽ gây được tiếng vang. Tôi sẽ đề nghị như sau trong bản demo của bạn:
- Tạo một dự án Windows Forms (tránh xa WPF và xaml - nó quá giật mình)
- Kết nối với cơ sở dữ liệu SQL (một số cơ sở dữ liệu thử nghiệm)
- Sử dụng Linq2Sql hoặc EntityFramework để tạo mô hình dữ liệu cho nó
- Tạo một lớp kho lưu trữ có một phương thức để trả về một số danh sách các thực thể
- Viết một truy vấn trong phương thức đó bằng linq, chỉ ra intellisense
- Chỉ ra rằng linq hoạt động trên tất cả các đối tượng, không chỉ các thực thể
- Chỉ ra rằng nếu bạn thay đổi cơ sở dữ liệu và tạo lại mô hình, bạn sẽ gặp lỗi biên dịch
- Thả một cái
DataGridView
trên cửa sổ chính
- Chứng minh cơ sở dữ liệu bằng cách điền vào lưới với các thực thể từ kho lưu trữ
- Chỉ ra tất cả những thứ hay ho về lưới điện tốt hơn nhiều so với VB6
- Tạo một tệp .rdlc (báo cáo)
- Tạo một báo cáo đơn giản bên trong Visual Studio
- Thả trình xem báo cáo trên cửa sổ và hiển thị báo cáo bên trong trình xem báo cáo
- (Rõ ràng là bạn cần cài đặt ReportViewer và đã thực hành tất cả điều này trước tiên)
- Hãy đưa ra một vấn đề "lỗ ở giữa" và sau đó chứng minh giải quyết nó bằng cách tạo ra một phương thức lấy
Action
tham số làm tham số. Thực hiện điều này trước tiên bằng cách chuyển một phương thức khác làm tham số, và sau đó thổi bay tâm trí của chúng bằng cách chuyển một đại biểu ẩn danh bằng cú pháp lambda
- Thể hiện tổng quát bằng cách sử dụng các lớp
List<T>
và Dictionary<T1,T2>
bộ sưu tập và chỉ ra cách nó tạo mã được gõ mạnh (VB6 có nội dung tương tự, nhưng nó được gõ động)
- Viết một
foreach
vòng lặp song song lúng túng, sử dụng System.Diagnostics.Stopwatch
để đo thời gian thực hiện, sau đó sử dụng thư viện song song tác vụ để thay đổi vòng lặp thành Parallel.Foreach
vòng lặp và thể hiện tốc độ, giả sử bạn đang sử dụng máy đa lõi.
- Thể hiện khả năng thêm trình xử lý ngoại lệ toàn cầu (đây là điều mà VB6 không thể làm)
Đó là những gì tôi sẽ làm.