2016-04-04 32 views
6

Sau khi trải qua hai năm cuối cùng với tư cách là nhà phát triển C#/WPF/MVVM, gần đây tôi đã tiếp quản dự án VB/Winform tại một công ty mới.Khởi tạo lớp thích hợp trong C# và Winforms

Tôi đã chuyển đổi thành công dự án thành C#. Tôi đã làm một số lượng lớn các nghiên cứu, cố gắng tìm ra các phương pháp tốt nhất cho dự án này, nhưng tôi đang cố gắng tìm ra chính xác bao nhiêu refactoring và tái cấu hình để làm.

Vấn đề của tôi là vấn đề này: nhà phát triển trước đã tạo hai lớp tĩnh lớn. Có hơn 30 biểu mẫu được sử dụng cho nhiều tác vụ khác nhau. Mỗi hình thức được gọi từ một sự kiện được điều khiển bởi một nút bấm vào một loại "menu chính" loại màn hình. Khi chương trình khởi tạo, một hàm từ một trong những lớp lớn này được gọi là instantiates EVERY form. Ngoài ra còn có một số lượng đáng kinh ngạc của statics và hằng số.

Tôi đã xóa các hằng số và tạo một lớp cụ thể cho chúng. Tôi đang chia nhỏ các lớp học lớn thành các lớp nhỏ hơn, dễ quản lý hơn (và có trách nhiệm cụ thể hơn), nhưng tôi đã có hàm khởi tạo cực kỳ lớn này để khởi tạo tất cả các dạng này.

Vì vậy, các câu hỏi của tôi (cuối cùng) là: Những gì tôi đã viết trên một cơn ác mộng tài nguyên? Hay, đây có phải là kiểu thiết kế VB/Winform bình thường mà tôi nên giữ không? Tôi có nên viết lại điều này sao cho mỗi biểu mẫu/lớp được khởi tạo khi nút gọi biểu mẫu đó được nhấp vào, vì vậy nó có thể xử lý khi đóng?

Cảm ơn bạn đã chỉ đường cho bạn. Nếu tôi có thể cung cấp thêm thông tin để làm cho thông tin cụ thể hơn, vui lòng nhận xét và tôi sẽ chỉnh sửa.

+3

Cảm ơn chúa dev này đã được thay thế. – Phiter

+1

Âm thanh đơn giản như thiết kế kém với tôi. Tôi có thể hiểu ngay lập tức một vài hình thức, nhưng không phải mọi hình thức. Chúng chỉ nên được khởi tạo khi chúng sẵn sàng để sử dụng IMO.Trừ khi bạn đang giữ một biểu mẫu chính sẵn sàng để được hiển thị sau khi biểu mẫu đăng nhập đã hoàn tất. Thậm chí sau đó, tôi vẫn không làm theo cách đó. Vì vậy, có, viết nó theo cách của bạn và nhanh chóng chỉ theo yêu cầu. Nó tốt hơn nhiều. – ManoDestra

+1

Quy tắc ngón tay cái là (bạn sẽ nghe thấy rất nhiều về các kết nối db, nhưng nó thực sự áp dụng cho hầu như tất cả các lớp) khởi tạo càng muộn càng tốt, bỏ càng sớm càng tốt. Điều này đảm bảo rằng GC có thể hoàn thành các đối tượng của bạn một cách hiệu quả. Các vật thể sống lâu sẽ rơi vào các vòng cuối của quá trình hoàn thành GC, có thể mất một lượng thời gian đáng kể. – Kevin

Trả lời

4

Là những gì tôi đã viết ở trên cơn ác mộng tài nguyên?

Hoặc, đây là một số loại bình thường mẫu thiết kế VB/Winform rằng tôi nên giữ?

Tuyệt đối không. Thiết kế của hệ thống khá giống hệt nhau trong VB và C#. Với một số ngoại lệ rất nhỏ, sự khác biệt giữa các ngôn ngữ chỉ là cú pháp.

Tôi có nên viết lại điều này để mỗi biểu mẫu/lớp được khởi tạo khi nút gọi biểu mẫu đó được nhấp vào, để nó có thể xử lý khi đóng?

Có theo lý thuyết. Các biểu mẫu sẽ hoạt động giống như khi bạn viết trong C#. Tất nhiên, nếu nhà phát triển ban đầu thích nhà nước toàn cầu, có thể có tất cả các loại trạng thái ẩn giấu giữa một hình thức của biểu mẫu và hình thức tiếp theo.

Có một vài tính năng của VB có thể dẫn đến các nhà phát triển yếu hơn. Sự hiện diện của các mô-đun (về cơ bản là một lớp tĩnh, nhưng đôi khi thuận tiện hơn) có thể thu hút một số người vào thêm nhà nước toàn cầu nhiều hơn họ cần. Cũng trong VB, nó tự động tạo ra khi cần một cá thể toàn cục, duy nhất của mỗi biểu mẫu có cùng tên với lớp. Điều này có thể khiến các nhà phát triển nhầm lẫn biểu mẫu dưới dạng một lớp và đối tượng - dẫn đến một cá thể của biểu mẫu, thay vì xây dựng và xử lý khi cần.

+0

Tôi đánh giá cao phản hồi của bạn, cũng như các nhận xét ở trên. Nó sẽ được làm lại một chút điên rồ này, nhưng ít nhất nó sẽ dẫn đến một cái gì đó tốt hơn tôi nhận được! – Kiel

Các vấn đề liên quan