Pomyślałbym o tym nieco inaczej: zachowanie podobne do „zmiennej globalnej” jest ceną płaconą przez administratorów baz danych (DBA), ponieważ wykonywanie ich pracy jest złem koniecznym.
Problem ze zmiennymi globalnymi, jak wskazało kilka innych, nie jest arbitralny. Problem polega na tym, że ich użycie sprawia, że zachowanie twojego programu jest coraz mniej przewidywalne, ponieważ trudniej jest ustalić, kto i w jaki sposób używa zmiennej. Jest to duży problem dla nowoczesnego oprogramowania, ponieważ nowoczesne oprogramowanie jest zwykle proszone o wiele elastycznych rzeczy. Może wykonywać miliardy, a nawet biliony skomplikowanych manipulacji stanem podczas przebiegu. Możliwość udowodnienia prawdziwych stwierdzeń dotyczących tego, co oprogramowanie zrobi w tych miliardach lub trylionach operacji, jest niezwykle cenna.
W przypadku nowoczesnego oprogramowania wszystkie nasze języki zapewniają narzędzia, które mogą w tym pomóc, takie jak enkapsulacja. Wybór, aby go nie używać, jest niepotrzebny, co prowadzi do mentalności „globals są złe”. W wielu regionach związanych z tworzeniem oprogramowania jedynymi osobami, które ich używają, są ludzie, którzy nie wiedzą, jak lepiej kodować. Oznacza to, że nie tylko bezpośrednio kłopoty, ale pośrednio sugerują, że programista nie wiedział, co robią. W innych regionach globale są całkowicie normalne (w szczególności oprogramowanie wbudowane uwielbia globały, częściowo dlatego, że dobrze współpracują z ISR). Jednak wśród wielu twórców oprogramowania są oni głosem mniejszości, więc jedynym głosem, który słyszysz, jest „globale są złe”.
Tworzenie baz danych jest jedną z takich sytuacji głosowych mniejszości. Narzędzia potrzebne do pracy z DBA są bardzo potężne, a ich teoria nie jest zakorzeniona w enkapsulacji. Aby wyciągnąć każdą odrobinę wydajności ze swoich baz danych, potrzebują pełnego, nieograniczonego dostępu do wszystkiego, podobnie jak globals. Posługuj się jedną z ich potężnych 100 milionów wierszy (lub więcej!) Baz danych, a docenisz, dlaczego ich silnik DB nie przechowuje żadnych ciosów.
Płacą za to cenę, droga cenę. DBA są zmuszone do patologii z dbałością o szczegóły, ponieważ ich narzędzia ich nie chronią. Najlepsze, jakie mają pod względem ochrony, to ACID lub klucze obce. Ci, którzy nie są patologiczni, znajdują się w kompletnym bałaganie tabel, który jest całkowicie bezużyteczny, a nawet uszkodzony.
Często zdarza się, że mamy pakiety oprogramowania na 100 000 linii. Teoretycznie każda linia w oprogramowaniu może wpływać na dowolną globalną w dowolnym momencie. W bazach danych nigdy nie można znaleźć 100 000 różnych zapytań, które mogą modyfikować bazę danych. Byłoby to nierozsądne, aby zachować dbałość o szczegóły potrzebne do ochrony przed sobą. Jeśli DBA ma coś takiego dużego, celowo obuduje swoją bazę danych za pomocą akcesorów, omijając problemy „globalne jak”, a następnie wykona tyle pracy, ile tylko możliwe, dzięki temu „bezpieczniejszemu” mechanizmowi. Tak więc, gdy przychodzi push, nawet ludzie bazy danych unikają globalizacji. Po prostu przychodzą z dużym niebezpieczeństwem i istnieją alternatywy, które są tak samo silne, ale nie tak niebezpieczne.
Czy wolisz chodzić po potłuczonym szkle, czy po ładnych chodnikach, jeśli wszystkie inne rzeczy są równe? Tak, możesz chodzić po stłuczonym szkle. Tak, niektórzy ludzie utrzymują się z tego. Ale nadal pozwól im zamiatać chodnik i iść dalej!