Tôi muốn đưa ra một vài quan sát:
Vâng, một cơ sở dữ liệu là trạng thái toàn cầu.
Trên thực tế, đó là một trạng thái siêu toàn cầu, như bạn đã chỉ ra. Nó là phổ quát! Phạm vi của nó đòi hỏi bất cứ điều gì hoặc bất cứ ai kết nối với cơ sở dữ liệu. Và, tôi nghi ngờ rất nhiều người có nhiều năm kinh nghiệm có thể kể cho bạn nghe những câu chuyện kinh dị về việc "những điều kỳ lạ" trong dữ liệu dẫn đến "hành vi bất ngờ" trong một hoặc nhiều ứng dụng có liên quan ...
Một trong những hậu quả tiềm tàng của việc sử dụng biến toàn cục là hai "mô-đun" riêng biệt sẽ sử dụng biến đó cho các mục đích riêng biệt của chúng. Và đến mức đó, một bảng cơ sở dữ liệu không khác. Nó có thể trở thành nạn nhân của cùng một vấn đề.
Hmm ... Đây là điều:
Nếu một mô-đun không hoạt động bên ngoài theo một cách nào đó, nó không làm gì cả.
Một mô-đun hữu ích có thể được cung cấp dữ liệu hoặc nó có thể tìm thấy nó. Và, nó có thể trả về dữ liệu hoặc nó có thể sửa đổi trạng thái. Nhưng, nếu nó không tương tác với thế giới bên ngoài theo một cách nào đó, thì nó cũng có thể không làm gì cả.
Bây giờ, sở thích của chúng tôi là nhận dữ liệu và trả lại dữ liệu. Hầu hết các mô-đun chỉ đơn giản là dễ viết hơn nếu chúng có thể được viết với sự coi thường hoàn toàn cho những gì thế giới bên ngoài đang làm. Nhưng cuối cùng, một cái gì đó cần phải tìm dữ liệu và sửa đổi trạng thái bên ngoài, toàn cầu đó.
Hơn nữa, trong các ứng dụng trong thế giới thực, dữ liệu tồn tại để có thể đọc và cập nhật bằng nhiều hoạt động khác nhau . Một số vấn đề được ngăn chặn bởi các khóa và giao dịch. Nhưng, ngăn chặn các hoạt động này xung đột với nhau về nguyên tắc , vào cuối ngày, chỉ đơn giản liên quan đến suy nghĩ cẩn thận. (Và phạm sai lầm ...)
Nhưng ngoài ra, chúng ta thường không làm việc trực tiếp với nhà nước toàn cầu.
Trừ khi ứng dụng sống trong lớp dữ liệu (bằng SQL hoặc bất cứ thứ gì), các đối tượng mà các mô-đun của chúng tôi làm việc thực sự là một bản sao của trạng thái chung được chia sẻ. Chúng tôi có thể làm bất cứ điều gì chúng tôi muốn mà không có bất kỳ tác động nào đến trạng thái chia sẻ thực tế.
Và, trong trường hợp chúng ta cần phải thay đổi trạng thái toàn cầu đó, với giả định rằng dữ liệu chúng ta đã cung cấp không thay đổi, chúng ta thường có thể thực hiện cùng một kiểu khóa mà chúng ta sẽ làm trên toàn cầu địa phương.
Và cuối cùng, chúng ta thường làm những việc khác nhau với cơ sở dữ liệu hơn chúng ta sức mạnh với globals nghịch ngợm.
Một thế giới nghịch ngợm, bị phá vỡ trông như thế này:
Int32 counter = 0;
public someMethod() {
for (counter = 0; counter < whatever; counter++) {
// do other stuff.
}
}
public otherMethod() {
for (counter = 100; counter < whatever; counter--) {
// do other stuff.
}
}
Chúng tôi chỉ đơn giản là không sử dụng cơ sở dữ liệu cho các công cụ trong quá trình / hoạt động như thế. Và nó có thể là bản chất chậm của cơ sở dữ liệu và sự tiện lợi tương đối của một biến đơn giản ngăn cản chúng ta: Sự tương tác chậm chạp, lúng túng của chúng ta với cơ sở dữ liệu chỉ khiến chúng trở thành ứng cử viên tồi cho nhiều lỗi mà chúng ta đã mắc phải trong quá khứ .