2009-02-03 16 views
10

Thực tiễn tốt nhất để lưu trữ các biến toàn cục trong một ứng dụng VB.NET WinForms là gì. Ví dụ: khi người dùng đăng nhập vào ứng dụng, bạn có thể muốn lưu trữ đối tượng CurrentUser có thể truy cập được trong ứng dụng. Bạn có thể lưu trữ điều này như một đối tượng trong một mô-đun hoặc tạo một lớp có chứa các thành viên cho tất cả các hình cầu cần thiết, bạn vẫn cần phải lưu trữ cá thể của nó ở đâu đó.Thực hành tốt nhất trên toàn cầu (hoặc thay thế) trong .NET

Khung làm việc có cung cấp giải pháp dễ dàng cho điều này không?

Trả lời

14

Tôi nghĩ rằng 'Không' là một chút khắc nghiệt, đây là một trích dẫn từ Steve McConnell:

Được sử dụng với kỷ luật biến, toàn cầu có ích trong một số trường hợp

Tôi nghĩ giống như thợ mộc tốt có công cụ thích hợp cho công việc và sẽ sử dụng đúng công cụ nếu cần, lập trình viên cũng nên sử dụng ll của các công cụ theo ý của họ.

Trực tiếp từ Mã của Tour de Force 'Hoàn thành nhiều lý do để sử dụng dữ liệu toàn cầu:

  • bảo tồn giá trị toàn cầu
  • giản sử dụng rất phổ biến dữ liệu
  • dữ liệu tramp Loại bỏ

McConnell cũng cho biết:

Chỉ sử dụng dữ liệu toàn cục làm phương sách cuối cùng. Trước khi bạn sử dụng dữ liệu toàn cầu , hãy xem xét một vài lựa chọn thay thế.

đây là những lựa chọn thay thế ông liệt kê:

  • Bắt đầu bằng cách làm cho mỗi địa phương biến và làm cho biến toàn cục chỉ như là bạn cần phải
  • Phân biệt giữa toàn cầu và lớp biến
  • Sử dụng truy cập thói quen

Những điều tôi đã đề cập ở đây trở nên tuyệt vời bảo hiểm trong cuốn sách tuyệt vời Code Complete

+0

** Hoàn thành mã * * cần được đọc. – AMissico

+0

"Sử dụng các thói quen truy cập" << --- Quan trọng nhất – Burnsys

4

Bạn có thể lưu các biến có thể truy cập trên toàn cầu dưới dạng thuộc tính tĩnh công khai chỉ đọc của lớp thích hợp, chẳng hạn như lớp tạo hoặc điền vào nó.

7

Có khoảng một phương pháp hay nhất liên quan đến việc sử dụng các biến toàn cục.

"Không".

(Nếu điều này nghe có vẻ khắc nghiệt, hãy xem xét những thứ như Người dùng hiện tại thường thuộc về một cái gì đó mà môi trường đã duy trì một phiên bản duy nhất cho bạn, chẳng hạn như Phiên làm việc. CurrentUser ở đó và lấy nó từ đó. Đừng tạo ra các hình cầu của riêng bạn, điều này sẽ làm cho ứng dụng của bạn khó duy trì và dễ bị tổn thương hơn trong điều kiện chủng tộc.)

+4

Tôi sẽ tìm phiên trong ứng dụng WinForms ở đâu? –

0

An toàn hơn một loại vườn toàn cầu.

+1

Singletons có thể là "globals glorified". Nhưng điều này không làm cho họ một cách tiếp cận tốt với các biến toàn cục. [Xem tất cả các vấn đề tốt đẹp với Singleton instatiation về Threading.] – Leonidas

3

Sử dụng biến cố định/biến toàn cục sẽ gây bất lợi cho khả năng kiểm thử mã của bạn, vì thử nghiệm không thể chắc chắn rằng đối tượng mà nó thao tác không gây ra tác dụng phụ trong các khu vực dường như không liên quan của codebase.

Nếu bạn có một lớp cần một thể hiện của lớp CurrentUser, hãy yêu cầu nó trong hàm tạo của nó.

Xem ở đây để biết thêm: http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/

+0

Một liên kết khác thảo luận về chủ đề này: "Global State and Singletons" http://www.youtube.com/watch?v=-FRm3VPhseI –

1

thực hành của tôi là để đặt các biến toàn cầu như CurrentUser, ConfigFilePath và tương tự vào program.vb (lớp khởi động với phụ chính). Bằng cách đó, không ai sử dụng các biến toàn cầu một cách vô thức vì chúng phải được truy cập thông qua chương trình không gian tên.

Trong logic nghiệp vụ, tôi không bao giờ sử dụng biến toàn cầu trực tiếp. Nếu bất kỳ hàm nào cần sử dụng biến toàn cục, nó phải được gửi dưới dạng tham số hàm.

Không có cách nào để tránh sử dụng các biến toàn cầu. IMHO, tốt hơn nên gọi họ bằng tên thật của họ và sử dụng chúng một cách cẩn thận sau đó che giấu chúng trong đĩa đơn, phiên hoặc tệp.

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