Warum sollten wir eine gute Verzeichnisstruktur entwerfen?

零下一度
Freigeben: 2017-07-20 15:50:00
Original
2984 Leute haben es durchsucht

Beim Entwerfen einer Website sollten Sie im Voraus einen Ordner auf der Festplatte Ihres Computers als Ausgangspunkt für Ihre Arbeit erstellen und dann mehrere Unterordner unter dem Ordner erstellen, um eine sinnvolle Verzeichnisstruktur zu bilden, damit verschiedene Arten von Die Dateien werden auf der Website gespeichert.
Die Struktur des Verzeichnisses ist ein Problem, das beim Erstellen einer Website oft übersehen wird. Selbst der Verzeichnisname ist im Nachhinein leicht zu finden, auch wenn er nicht mehr weiß, warum dieses Verzeichnis erstellt wurde . Welche Art von Dateien werden gespeichert? Streng genommen werden die Besucher kein klares Gefühl über die Qualität der Verzeichnisstruktur haben, aber sie wird einen wichtigen Einfluss auf die Pflege der Website selbst und die Erweiterung und Transplantation zukünftiger Inhalte haben.

Warum sollten wir die Verzeichnisstruktur entwerfen?

„Projektverzeichnisstruktur entwerfen“ ist dasselbe wie „Codierung“. Stil“ „Das Gleiche ist eine Frage des persönlichen Stils. Es gab schon immer zwei Einstellungen zu dieser Stilnorm:

1. Ein Schülertyp glaubt, dass diese persönliche Stilfrage „irrelevant“ ist. Der Grund dafür ist, dass Stilprobleme überhaupt kein Problem darstellen, solange das Programm funktioniert das Programm effizienter;

Ich neige eher zu Letzterem, weil ich ein direktes Opfer der Gedanken und Verhaltensweisen der ersteren bin. Ich habe einmal ein Projekt gepflegt, das sehr schwer zu lesen war. Die Implementierungslogik war nicht kompliziert, aber es dauerte sehr lange, bis ich verstand, was es ausdrücken wollte. Seitdem habe ich persönlich sehr hohe Anforderungen an die Verbesserung der Lesbarkeit und Wartbarkeit des Projekts. „Projektverzeichnisstruktur“ gehört eigentlich zur Kategorie „Lesbarkeit und Wartbarkeit“. Wir entwerfen eine Verzeichnisstruktur auf klarer Ebene, um die folgenden zwei Punkte zu erreichen:

 1. Hohe Lesbarkeit: Personen Wer mit dem Code dieses Projekts nicht vertraut ist, kann die Verzeichnisstruktur auf einen Blick verstehen und wissen, welches Programmstartskript sich befindet, wo sich das Testverzeichnis befindet, wo sich die Konfigurationsdatei befindet usw. Dadurch können Sie das Projekt sehr schnell verstehen.

2. Hohe Wartbarkeit: Nach der Definition der Organisationsregeln kann der Betreuer klar erkennen, welche neuen Dateien und Codes in welchem ​​Verzeichnis hinzugefügt werden sollen es platziert werden? Der Vorteil besteht darin, dass die Projektstruktur mit der Zeit, wenn die Größe des Codes/der Konfiguration zunimmt, nicht unübersichtlich wird und gut organisiert bleibt.

Daher halte ich es für notwendig, eine klare und hierarchische Verzeichnisstruktur beizubehalten. Darüber hinaus ist die Organisation eines guten Projektverzeichnisses eigentlich eine sehr einfache Angelegenheit.

Verzeichnisorganisation

Es gibt bereits einige Ideen, wie man eine bessere Python-Projektverzeichnisstruktur organisieren kann Struktur. In dieser Frage zu Stackoverflow können Sie alle Diskussionen zur Python-Verzeichnisstruktur sehen.

Was hier gesagt wird, ist schon sehr gut. Ich werde das Rad nicht neu erfinden und verschiedene Methoden auflisten.

Angenommen, Ihr Projekt heißt foo, schlage ich vor, dass die bequemste und schnellste Verzeichnisstruktur ausreicht:

 

Foo/

  |-- bin/

    | |-- foo

  |

  |-- foo/

    | |-- tests/

      | | |-- __init__.py

      | | |-- test_main.py

    | |

    | |-- __init__.py

    | |-- main.py

  |-- docs/

    | |-- conf.py

    | |-- abc.rst

    |

  |-- setup.py

  |-- requirements.txt

  |-- README

Eine kurze Erklärung:

1. bin/: Speichern Sie einige ausführbare Dateien des Projekts, natürlich können Sie es script/ nennen oder so ähnlich

 2. foo/: Speichern Sie den gesamten Quellcode des Projekts. (1) Alle Module und Pakete im Quellcode sollten in diesem Verzeichnis abgelegt werden. Platzieren Sie es nicht im obersten Verzeichnis. (2) Sein Unterverzeichnis tests/ speichert Unit-Testcode; (3) Der Eintrag des Programms heißt am besten main.py;

 3. docs/: speichert einige Dokumente

 4.setup.py: Installations-, Bereitstellungs- und Verpackungsskripte;

 5.requirements.txt: Externe Python-Pakete, die Softwareabhängigkeiten speichern Liste;

 6.README: Projektbeschreibungsdokument.

Darüber hinaus bieten einige Pläne mehr Inhalte. Zum Beispiel LICENSE.txt, ChangeLog.txt Dateien usw., ich habe sie hier nicht aufgelistet, da diese Dinge hauptsächlich benötigt werden, wenn das Projekt Open Source ist. Wenn Sie eine Open-Source-Software schreiben möchten, können Sie sich auf diesen Artikel zum Organisieren von Verzeichnissen beziehen.

 Über den Inhalt von README

Ich denke, das ist ein Dokument, das jedes Projekt haben sollte

Der Zweck besteht darin, die Informationen des Projekts kurz zu beschreiben und den Lesern ein schnelles Verständnis des Projekts zu ermöglichen.

Folgende Dinge müssen erläutert werden:

1. Softwarepositionierung, die Grundfunktionen der Software;

 2. Methoden zum Ausführen des Codes: Installationsumgebung, Startbefehle usw.;

 3. Kurze Gebrauchsanweisung; >

 4 .Beschreibung der Codeverzeichnisstruktur, die die Grundprinzipien der Software detaillierter erklären kann

 5. Beschreibung häufig gestellter Fragen.

Ich denke, die oben genannten Punkte sind besser . Da in den frühen Phasen der Softwareentwicklung der oben genannte Inhalt möglicherweise unklar ist oder sich während des Entwicklungsprozesses ändert, ist es nicht erforderlich, zu Beginn alle Informationen zu vervollständigen. Aber wenn das Projekt abgeschlossen ist, muss ein solches Dokument geschrieben werden.

Sie können sich auf die Schreibmethode von Readme im Redis-Quellcode beziehen, die die Redis-Funktion und die Quellcodestruktur kurz, aber klar beschreibt.

READMEÜber require.txt und setup.py

Setup.py

Im Allgemeinen verwenden Sie

, um Code-Paket-, Installations- und Bereitstellungsprobleme zu verwalten. Die branchenübliche Schreibweise besteht darin, diese Dinge mit dem beliebten Paketierungstool setuptools von Python zu verwalten. Dieser Ansatz wird häufig in Open-Source-Projekten verwendet. Der Kerngedanke hierbei ist jedoch nicht, standardisierte Tools zur Lösung dieser Probleme zu verwenden, sondern zu sagen, dass

ein Projekt über ein Installations- und Bereitstellungstool verfügen muss, das die Umgebung und den Code schnell und einfach auf einer neuen Maschine installieren kann . Stellen Sie das Programm bereit und führen Sie es aus.

Ich bin schon einmal durch diese Falle gegangen.

setup.py Als ich anfing, Projekte in Python zu schreiben, wurde der Prozess der Installation der Umgebung, der Bereitstellung des Codes und der Ausführung des Programms vollständig manuell durchgeführt:

1. Bei der Installation der Umgebung vergesse ich in letzter Zeit oft, ein neues Python-Paket hinzuzufügen. Dadurch geht das Programm schief, sobald es online ausgeführt wird 🎜> 2. Das Problem der Versionsabhängigkeit von Python-Paketen: Manchmal verwenden wir eine Version des Python-Pakets, aber das offizielle Paket ist bereits das neueste, und durch die manuelle Installation wird möglicherweise das falsche installiert >

3. Wenn es viele abhängige Pakete gibt, ist es sehr zeitaufwändig, diese Abhängigkeiten einzeln zu installieren

4. Wenn neue Schüler mit dem Schreiben von Projekten beginnen Es ist sehr mühsam, das Programm auszuführen, da Sie häufig vergessen, wie verschiedene Abhängigkeiten installiert werden.

 

Sie können diese Dinge automatisieren, um die Effizienz zu verbessern und die Fehlerwahrscheinlichkeit zu verringern. „Automatisieren Sie komplexe Dinge, und Dinge, die automatisiert werden können, müssen automatisiert werden.“ Die Dokumentation von setuptools ist relativ umfangreich. Wenn Sie neu darin sind, ist es möglicherweise nicht einfach, den Einstiegspunkt zu finden. Der Weg, Technologie zu lernen, besteht darin, zu sehen, wie andere sie verwenden. Sie können sich auf ein Web-Framework in Python beziehen und erfahren, wie Flask geschrieben ist: setup.py.

Natürlich ist es keine schlechte Idee, statt einfach ein eigenes Installationsskript (setup.py) zu schreiben.

deploy.sh require.txtsetup.py

Der Zweck dieser Datei ist:

1. Praktisch für Entwickler, um Softwarepaketabhängigkeiten beizubehalten. Fügen Sie dieser Liste während des Entwicklungsprozesses neue Pakete hinzu, um zu vermeiden, dass beim

Installieren von Abhängigkeiten Softwarepakete fehlen.

 2. Für Leser ist es praktisch, zu wissen, welche Python-Pakete in verwendet werden Projekt. setup.py

Das Format dieser Datei besteht darin, dass jede Zeile eine Paketabhängigkeitsbeschreibung enthält, normalerweise im Format

. Voraussetzung ist, dass dieses Format an erkannt werden kann. damit es einfach sein kann Verwenden Sie , um alle Python-Paketabhängigkeiten zu installieren. Spezifische Formatanweisungen: Klicken Sie hier.

flask>=0.10 Informationen zur Verwendung der Konfigurationsdatei pippip install -r requirements.txt

Beachten Sie, dass

in der obigen Verzeichnisstruktur nicht im Quellcodeverzeichnis abgelegt wird . Legen Sie es stattdessen im Verzeichnis ab:

Viele Projekte verwenden Konfigurationsdateien wie folgt: conf.pydocs/

1. Die Konfigurationsdatei ist geschrieben in In einer oder mehreren Python-Dateien, wie zum Beispiel conf.py hier;

2. Welches Modul im Projekt verwendet diese Konfigurationsdatei direkt in Form von

Verwenden Sie die Konfiguration in Code.

Ich bin mit diesem Ansatz nicht einverstanden: import conf

1. Dies erschwert Unit-Tests (da das Modul auf externer Konfiguration basiert);

2. Andererseits dient die Konfigurationsdatei als Schnittstelle für den Benutzer zur Steuerung des Programms, und der Benutzer sollte den Pfad der Datei frei angeben können

3. Die Wiederverwendbarkeit von Programmkomponenten ist zu schlecht, da die meisten Module auf die Datei

Daher denke ich, dass der bessere Weg, die Konfiguration zu verwenden, ist:

conf.py 1. Die Konfiguration von Modulen kann flexibel konfiguriert werden und wird nicht durch externe Konfigurationsdateien beeinflusst ;

2. Auch die Konfiguration des Programms ist flexibel steuerbar.

Was diese Idee unterstützen kann, ist, dass Schüler, die Nginx und MySQL verwendet haben, wissen, dass Nginx- und MySQL-Programme Benutzerkonfigurationen frei angeben können.

Daher sollten Konfigurationsdateien nicht direkt import conf im Code verwendet werden. Das conf.py in der obigen Verzeichnisstruktur ist ein Konfigurationsbeispiel und keine fest codierte Konfigurationsdatei, auf die im Programm direkt verwiesen wird. Sie können das Programm den Konfigurationsinhalt lesen lassen, indem Sie den Konfigurationspfad für den Startparameter main.py angeben. Natürlich können Sie das conf.py hier in einen ähnlichen Namen ändern, z. B. settings.py. Oder Sie können auch Inhalte in anderen Formaten zum Schreiben von Konfigurationsdateien verwenden, z. B. settings.yaml und dergleichen.

Im Modul kann das Aufrufproblem verschiedener Dateien nur im Verzeichnis derselben Ebene realisiert werden. Wenn sie sich in Modulen unterschiedlicher Ebene befinden, müssen Umgebungsvariablen so konfiguriert werden Die Programme können auf derselben Ebene unter der Verzeichnisstruktur ausgeführt werden.

Die Schritte zum Konfigurieren von Umgebungsvariablen lauten wie folgt:

 '''Konfigurieren Sie Umgebungsvariablen, weil sie es sind in verschiedenen Verzeichnissen Zum Importieren müssen Sie zunächst Umgebungsvariablen konfigurieren, damit sich Programme gegenseitig im selben Verzeichnisstatus aufrufen können'''
import sys,os
''os .path.abspath ist der absolute Pfad zur Datei '''
 data = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__ ) )))
print(data)
sys.path.append(data)

Importieren Sie zunächst die Module sys, os, __file__, um den Dateinamen der aktuellen Datei abzurufen. os.path.abspath() dient dazu, den absoluten Pfad der aktuellen Datei abzurufen. os.path.dirname() dient dazu, den übergeordneten Pfad des aktuellen Dateipfads abzurufen. sys.path.append() dient dazu, den aktuellen Dateipfad zum Dateipfad hinzuzufügen, um die Konfiguration des Dateipfads zu realisieren der Anruf in der gleichen Ebene.

 

Verschiedene Funktionsmodule sind in verschiedenen Dateien gespeichert Ein Programm-Master-Eintrag. Wenn wir den Haupteingang aufrufen, ist die Umgebungsvariable tatsächlich der Ort des Haupteingangs des Programms. In Zukunft müssen Sie Code auf standardisierte Weise schreiben und versuchen, zwischen verschiedenen Modulen aufzurufen. Schauen wir uns einen einfachen Web-Framework-Typ an:

Das Obige ist zunächst ein DJ-Framework :

 --Backend-Frontend, zum Speichern von Datenbanküberprüfungsmodulen und Logikmodulen

 --Konfigurationsdatei-Konfigurationsmodul, verwendet zum Speichern von Dateikonfigurationsinformationen;

--frontend ist das Frontend;

--user_main.py ist der Haupteingang des Programms und das Ausführungsmodul des Programms.

Das obige ist der detaillierte Inhalt vonWarum sollten wir eine gute Verzeichnisstruktur entwerfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!