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 ...