2009-10-01 5 views
6

Zajmuję się tworzeniem aplikacji przy użyciu SQLAlchemy i wxPython, które staram się przechowywać w oddzielnych modułach składających się z logiki biznesowej, ORM i GUI.Jak ustawić kod źródłowy aplikacji wykonanej przy pomocy SQLAlchemy i interfejsu graficznego?

Nie jestem do końca pewien, jak to zrobić w sposób pytonowy.

Zważywszy, że mapping() musi być wywołana w Orther dla obiektów mają być stosowane, myślałem o umieszczenie go na __init__.py z logiką gospodarczą, ale zachowując wszystkie definicje tabel w osobnym module orm.py.

powinienem trzymać coś takiego:

/Business 
    /__init__.py 
    | mapping (module1.Class1, orm.table1) 
    | 
    /module1.py 
     Class1 

/orm.py 
    import 
    table1 = Table() 
/GUI 
    /main.py 
    | import business 
    /crud.py 

lub coś podobnego

/Business 
    /__init__.py 
    | import 
    | 
    /module1.py 
     Class1 
     table1 = Table() 
     mapping (module1.Class1, orm.table1) 

/GUI 
    /main.py 
    | import business 
    /crud.py 

Czy pierwsze podejście zalecane? Czy jest jakaś inna opcja? Widziałem drugi sposób, ale nie podoba mi się umieszczanie kodu obsługi bazy danych i kodu logiki biznesowej w tym samym module. Czy nad nim zastanawiam? Czy naprawdę nie jest tak dużym problemem?

+0

Wygląda na to, że to pytanie może dotknąć coś więcej niż tylko SQLAlchemy - jakieś pytonowe sprawdzone metody organizowania kodu projektu, które są w znacznym stopniu powiązane z bazą danych? – ariddell

+0

@aridell: możesz mieć rację, ale SQLAlchemy ma określony sposób ustawiania mapowań, które mogą, ale nie muszą, różnić się od tego, jak robią to inne istniejące ORMy lub niestandardowe ORMy. Ale zdecydowanie nie jest to specyficzne dla wxPython. – voyager

Odpowiedz

5

Znajduję this document przez Jp Calderone, aby być świetną wskazówką, jak (nie) struktury projektu Pythona. Po nim nie będziesz mieć problemów. Będę odtworzyć cały tekst tutaj:

Plików strukturę projektu Pythona

Czy:

  • nazwą katalogu coś związane z projektem. Na przykład: , jeśli projekt nosi nazwę "Skręcona", nazwa katalogu najwyższego poziomu dla jego plików źródłowych Twisted. Po wykonaniu wersji należy dołączyć sufiks numeru wersji : Twisted-2.5.
  • utworzyć katalog Twisted/bin i umieścić pliki wykonywalne tam, jeśli masz żadnych. Nie podawaj im rozszerzenia, nawet jeśli są to pliki źródłowe Python . Nie umieszczaj w nich żadnych kodów, z wyjątkiem importowania i wywoływania funkcji głównej zdefiniowanej gdzie indziej w swoich projektach jako .
  • Jeśli Twój projekt można wyrazić jako pojedynczy plik źródłowy Python , umieść go w katalogu i nadaj mu nazwę związaną z projektem. Na przykład: Twisted/twisted.py. Jeśli potrzebujesz wielu plików źródłowych, utwórz pakiet (Twisted/twisted/, z pustym Twisted/twisted/__init__.py) i umieść w nim swoje pliki źródłowe. Dla przykładu , Twisted/twisted/internet.py.
  • umieścić swoje testy jednostkowe w sub-pakietu pakietu (uwaga - to znaczy, że opcja plik pojedyncze źródło Python powyżej był podstęp - zawsze trzeba w najmniej jednego innego pliku dla jednostki testów). Na przykład: Twisted/twisted/test/. Oczywiście, sprawiają, że jest to pakiet z Twisted/twisted/test/__init__.py. Umieść testy w plikach takich jak Twisted/twisted/test/test_internet.py.
  • dodaj Twisted/README i T wisted/setup.py, aby wyjaśnić i zainstalować oprogramowanie, jeśli czujesz się dobrze.

Nie:

  • umieścić swoje źródło w katalogu zwanego src lub lib. To sprawia, że ​​trudno jest go uruchomić bez instalacji.
  • Połóż swoje testy poza pakietem Python . To sprawia, że ​​testy są trudne w stosunku do zainstalowanej wersji.
  • utwórz pakiet, który ma tylko __init__.py, a następnie umieść cały kod w __init__.py. Po prostu zbuduj moduł zamiast paczki, to jest łatwiejsze, ponieważ jest to .
  • spróbować wymyślić magicznych sztuczek, aby Python stanie zaimportować moduł lub pakiet bez konieczności użytkownik dodać katalog zawierający go swojej drodze importu (albo poprzez PYTHONPATH lub innego mechanizm). Nie będziesz prawidłowo obsługiwać wszystkich przypadków, a użytkownicy otrzymają od Ciebie zła, gdy Twoje oprogramowanie nie działa w ich środowisku.
+0

Wzniesiono jako dobrą wskazówkę. Cieszę się, że było to bardzo bliskie mojemu dotykowemu projektowi (tm). – voyager

+2

wydaje się to dobrą ogólną radą, ale nie wydaje się, aby całkowicie odpowiedzieć na pierwotne pytanie. – leonigmig

Powiązane problemy