2012-07-14 35 views
5

gần đây tôi có cảm giác rằng các biến mẫu có cùng vấn đề với các biến toàn cầu, tôi googled về điều này và tìm thấy this old article mà nhiều hay ít mô tả các vấn đề tiềm năng tôi đang nhìn thấy.Biến mẫu có phải là biến toàn cục mới không?

Bạn sử dụng phương pháp hay nào để tránh các vấn đề tương tự của các biến toàn cục ảnh hưởng đến các biến mẫu hoặc biến lớp?

Trả lời

2

Các lớp nhỏ hơn nhiều so với cấu trúc toàn cầu, do đó tác động của một biến mẫu nhỏ hơn nhiều. Bằng cách giữ kích thước lớp học nhỏ và tôn trọng chặt chẽ với nguyên tắc trách nhiệm duy nhất, phần lớn nhược điểm của một biến toàn cầu bị ngăn chặn. Nếu biến cá thể được tạo ra từ một tham số được truyền vào thì tôi thường làm cho tham số đó được yêu cầu trong hàm tạo làm cho sự phụ thuộc rõ ràng. Ngoài ra biến thể hiện được đóng gói tốt, không bao giờ được sửa đổi trực tiếp bên ngoài các phương thức của cá thể làm cho nó rất dễ dàng để xác định nơi biến thể hiện được sửa đổi. Cuối cùng biến thể hiện phải có ý nghĩa với toàn bộ lớp hoặc phải là riêng tư.

0

Biến thể hiện chỉ có thể truy cập trong một lớp cụ thể. Vì vậy, để ngăn chặn các biến mẫu được sử dụng quá rộng, hãy giữ các lớp nhỏ. Nếu một lớp lớn lên, hãy quyết định xem các phần của nó có thể được tái cấu trúc thành lớp khác, lớp nhỏ hơn, mà lớp gốc sử dụng.

0

Biến không thể hiện cũng như biến toàn cục cũng như bất kỳ loại biến nào đều có "sự cố" ... Tất cả đều là công cụ. Vấn đề là đôi khi rất nhiều lập trình viên chọn sử dụng "công cụ sai". Bạn phải suy nghĩ cẩn thận lựa chọn của bạn có nghĩa là gì, vì vậy bạn có thể đưa ra lựa chọn đúng.

Sử dụng biến toàn cầu cho một cái gì đó, như CurrentUserName ... Có nghĩa là bạn đang nói rằng CurrentUserName là một cái gì đó phổ biến biết. Và rằng "có thể chỉ có một" CurrentUserName tại mỗi thời điểm. Và điều đó có thể sẽ sai nếu bạn muốn cho phép người dùng đăng nhập cùng một lúc (trừ khi bạn thực sự may mắn và cả hai người dùng có cùng tên) ...

Sử dụng sai sự thật với các biến mẫu là nếu bạn đặt địa chỉ e-mail của một người dùng như là một biến cá thể, và sau đó bạn nhận ra rằng mỗi người dùng có thể có nhiều địa chỉ e-mail.

Tôi cũng đưa ra một ví dụ về thừa kế, vì tôi nghĩ nó sẽ làm rõ hơn: Một vấn đề liên quan đến thừa kế là ví dụ nếu bạn đang làm mẫu cho Sinh viên, vấn đề giáo viên. một lớp con của Person và Teacher là một lớp con của Person. Và sau đó bạn nhận ra rằng một số người có thể là cả hai ...

Sinh viên kế thừa từ Người là mối quan hệ tĩnh không thể thay đổi khi chạy. Và học sinh và giáo viên không phải là mối quan hệ tĩnh ... Một người có thể không, và sau đó bắt đầu là một sinh viên, và sau đó bắt đầu trở thành một giáo viên, và sau đó dừng lại là cả hai, nhưng nó sẽ luôn là cùng một người, và mô hình đó không thể xử lý điều đó ....

Quay lại người dùng, người dùng được "liên kết" với nhiều tài khoản e-mail ... Nếu bạn đặt một biến mẫu bạn nói rằng anh ta chỉ là " liên kết "với một tài khoản e-mail duy nhất và bạn đang mâu thuẫn với miền sự cố của mình và đó là lý do tại sao bạn sẽ gặp sự cố ...

Điều tương tự cũng áp dụng nếu bạn nói chỉ có tên người dùng hiện tại được biết đến trên toàn cầu .. ..

Sự cố trong mọi trường hợp là t mũ bạn có một vấn đề tên miền, và bạn đang mô hình hóa nó sai ... Bạn phải làm cho chương trình của bạn, và mô hình của bạn, cư xử tương tự như miền vấn đề .... Nếu bạn không làm điều đó, bạn sẽ có vấn đề , bất cứ công cụ nào bạn chọn để giải quyết vấn đề của mình.

BTW: Tôi cũng nghĩ rằng Người dùng có danh sách địa chỉ e-mail là sai, nhưng đó là một tập hợp động cơ hoàn toàn khác. Tôi thực sự muốn sử dụng một

class ContactInformation 
{ 
    User contact; 
    EMailAddress email; 
} 

và nhớ rằng đối tượng không "sở hữu" hay "có" đối tượng khác ... Đó là một quyết định thực hiện ... Đối tượng chỉ "biết" các đối tượng khác ...

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