Reorganizuję mój kod i dlatego tworzę nowe przestrzenie nazw. Zmieniam klasy "statyczne" (klasy z @staticmethod w każdej metodzie) dla modułów. To jest droga, prawda?Dobre praktyki dzielenia zasobów między modułami?
Problem polega na tym, że mam wątpliwości, w jaki sposób udostępniać zasoby między tymi modułami.
Załóżmy, że mam moduł, z którego robiłem wszystkie połączenia z bazą danych, i oczywiście wszystkie klasy/metody dzieliły zmienną, która zapisała kursor DB (używam SQLite). Teraz, w różnych modułach, muszą również udostępniać kursor.
Więc moje pomysły:
Zadeklaruj zmienną globalną w każdym module. Ale globale są złe, jedz dzieci i kradną nasze posady. Więc nie wiem, czy to jest droga.
'''Sub Module 1''' global database_cursor
importu „ojcem” database_module z oryginalnym database_cursor i używać coś takiego:
'''Sub Module 1''' db_cursor = database_module.database_cursor
Ten drugi wygląda dobrze w tym przypadku, ale myślę, że w wielu przypadkach doprowadzi do rekurencyjnego importu, co, jak sądzę, jest czymś, czego należy unikać.
Myślę, że możesz być [nadmiernie nerwowy] (http://en.wikipedia.org/wiki/Overengineering). Jeśli funkcje wymagają kursora, po prostu dodaj parametr 'cursor' do funkcji i gotowe. Kod wywołujący całą funkcję utworzy pojedynczą zmienną lokalną zawierającą kursor i przekazującą go do wszystkich funkcji. Powiedziałbym też, że wystarczy jeden moduł do zarządzania bazą danych. Jeśli okaże się, że potrzebujesz więcej organizacji, lepiej użyj czegoś takiego jak 'SQLAlchemy'. – Bakuriu
Nie sądzę, że to już koniec prac inżynieryjnych. Całkowicie legalne jest udostępnianie takich danych jak połączenia z bazami danych, aby uniknąć niepotrzebnej reinicjalizacji. Uważam jednak, że mądrze jest przyjrzeć się łączeniu połączeń w tym zakresie. W przeciwnym razie prawdopodobnie wystąpią problemy z połączeniem, które jest nadal używane z poprzedniego połączenia. – RickyA