몇 가지 관찰을 제공합니다.
예, 데이터베이스는 전역 상태입니다.
사실, 당신이 지적했듯이, 그것은 초 세계적 상태입니다. 그것은의 보편적! 그 범위는 수반 아무것도 또는 누군가 데이터베이스에 연결합니다. 그리고 수년간의 경험을 가진 많은 사람들이 데이터의 "이상한 일"이 하나 이상의 관련 응용 프로그램에서 "예기치 않은 행동"을 초래 한 것에 대한 공포 이야기를 들려 줄 수 있다고 생각합니다 ...
전역 변수를 사용할 경우 발생할 수있는 결과 중 하나는 두 개의 개별 "모듈"이 고유 한 목적으로 해당 변수를 사용한다는 것입니다. 그리고 그 정도로 데이터베이스 테이블도 다르지 않습니다. 같은 문제에 희생 될 수 있습니다.
흠 ... 여기 일이 있습니다 :
어떤 방식 으로든 모듈이 외적으로 작동하지 않으면 아무 것도하지 않습니다.
유용한 모듈이 될 수 주어진 데이터를하거나 수행 할 수 있습니다 찾을 수 를. 또한 데이터 를 반환 하거나 상태 를 수정할 수 있습니다 . 그러나 외부 세계와 어떤 식 으로든 상호 작용하지 않으면 아무것도 할 수 없습니다.
이제 데이터 를 수신하고 데이터를 반환 하는 것이 좋습니다. 대부분의 모듈은 외부 세계가하는 일을 전혀 무시하고 작성할 수있는 경우 쓰기가 더 쉽습니다. 그러나 궁극적으로 무엇인가 할 필요가 찾아 데이터 및 수정 이 외부 세계 상태.
또한 실제 응용 프로그램에는 다양한 작업을 통해 데이터를 읽고 업데이트 할 수 있도록 데이터가 존재 합니다. 일부 문제는 잠금 및 트랜잭션으로 방지됩니다. 그러나 원칙적 으로 이러한 작업이 원칙적 으로 서로 충돌하는 것을 막기 위해서는 신중한 사고가 필요 합니다. (그리고 실수하는 중 ...)
또한 우리는 일반적으로 세계 국가와 직접 협력하지 않습니다 .
응용 프로그램이 데이터 계층 (SQL 등)에 상주하지 않는 한, 모듈이 작업하는 객체는 실제로 공유 전역 상태 의 복사본 입니다. 우리는 실제 공유 상태에 영향을 미치지 않고 원하는 것을 할 수 있습니다 .
그리고, 우리가 그 글로벌 상태를 변경해야 할 경우, 우리가 제공 한 데이터가 변경되지 않았다는 가정하에, 일반적으로 로컬 글로벌에서하는 것과 같은 종류의 잠금을 수행 할 수 있습니다.
우리가보다 그리고 마지막으로, 우리는 일반적으로 데이터베이스와 다른 일을 할 수도 나쁜 전역 때와.
장난스럽고 부서진 세계는 다음과 같습니다.
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.
}
}
우리는 단순히 그와 같은 프로세스 / 운영에 데이터베이스를 사용하지 않습니다. 그리고 데이터베이스의 느린 특성과 우리를 방해하는 간단한 변수의 상대적 편리함이있을 수 있습니다. 데이터베이스와의 느리고 어색한 상호 작용은 단순히 변수 로 인해 우리가 역사적으로했던 많은 실수에 대한 나쁜 후보 가 됩니다.