Większość programów, które piszę, to procesy o względnie płynnym przepływie, z określonym początkiem i oczekiwanym końcem. Same problemy mogą być skomplikowane, ale nie są łatwe do centralnego wykorzystania obiektów i programowania sterowanego zdarzeniami. Często po prostu ubieram się w różnorodne partie danych tekstowych, aby uzyskać różne dane tekstowe. Tylko od czasu do czasu muszę utworzyć klasę: Jako przykład, aby śledzić ostrzeżenia, błędy i komunikat debugowania, utworzyłem klasę (problemy) z jednym wystąpieniem (myErr), który uważam za przykład wzorca projektowego Singleton . Jako dodatkowy czynnik, moi koledzy są bardziej starzy (proceduralne) niż ja i nie znają programowania zorientowanego obiektowo, więc jestem niechętny tworzeniu rzeczy, których nie potrafią zinterpretować.Proszę opisać swoje zmagania z minimalizowaniem użycia zmiennych globalnych
A jednak wielokrotnie słyszę, że nawet wzorzec projektu Singleton jest rzeczywiście anty-wzorem i powinien być unikany, ponieważ zmienne globalne są złe.
Niewielkie funkcje wymagają podania kilku argumentów i nie wymagają znajomości konfiguracji (niezmiennej) lub stanu programu (zmiana) - zgadzam się. Jednak funkcje w środku łańcucha, które przede wszystkim kontrolują przepływ programu, wymagają dużej liczby zmiennych konfiguracyjnych i niektórych zmiennych stanu programu. Sądzę, że przekazanie kilkunastu argumentów do funkcji jest "rozwiązaniem", ale mało atrakcyjnym. Mógłbym oczywiście wciągnąć zmienne do jednej tablicy mieszania/dict/asocjacyjnej, ale to wygląda na oszukiwanie.
Na przykład, łącząc się z usługą Active Directory, aby utworzyć nowe konto, potrzebuję takich zmiennych konfiguracyjnych, jak nazwa użytkownika administracyjnego, hasło, docelowa jednostka organizacyjna, niektóre domyślne grupy, domena itp. Muszę przekazać te argumenty przez różne funkcje, które by ich nie używały, po prostu odsuwają je przez łańcuch, który ostatecznie doprowadziłby do funkcji, która faktycznie ich potrzebuje.
Chciałbym przynajmniej zadeklarować zmienne konfiguracyjne jako stałe, aby je chronić, ale mój wybrany język w dzisiejszych czasach (Python) nie zapewnia prostego sposobu, aby to zrobić, chociaż przepisy istnieją jako obejścia.
Liczne pytania dotyczące przepełnienia stosu wpłynęły na to, dlaczego? zła i wymaganego odskoku, ale nie często wspominajcie o tym, jak żyć z tym quasi-religijnym ograniczeniem. W jaki sposób rozwiązałeś, a przynajmniej rozwiązałeś kwestię zmiennych globalnych i stanu programu? Gdzie zawarłeś kompromis? Jakie były twoje sztuczki, oprócz przepychania się po stadach argumentów do funkcji?
Dobre pytanie - czy kwalifikujesz zmienne na poziomie klasy (element) jako zmienne globalne? –