Verzeichnisstruktur in Tntnet-Projekten

Standard

Es macht immer Sinn, sich über die Verzeichnisstruktur seines Codes Gedanken zu machen. Gerade bei größeren Projekten mit Arbeitsteilung, sollte die Arbeitsteilung auch durch die Ordnerstruktur unterstützt werden. Die Verwendung der Namensräume sollte selbstverständlich möglich konform zur Ordnerstruktur sein. Das gelingt mir in der Praxis auch nicht immer 100%, aber es ist sehr hilfreich, wenn man sich in fremden Code einarbeiten muss.

Bei der Ordnerstruktur macht Tntnet dem Entwickler keinerlei Vorschriften, wie diese auszusenden hat. Gerade wenn ein umfangreicher Code nicht umgeschrieben werden muss, wird man das sehr zu schätzen wissen. Ist man aber aber tatsächlich in der komfortablen Situation, ein völlig neues Programm zu schreiben ohne Altlasten, möchte man sich vielleicht doch an einem best practice orientieren. So könnte eine Verzeichnisstruktur aussehen….

/projektname
/projektname
/projektname/src
/projektname/src/Core
/projektname/src/Core/initcomponent.h
/projektname/src/Core/views
/projektname/src/Core/manager
/projektname/src/Core/models
/projektname/src/Core/controller
/projektname/src/Core/resources
/projektname/src/component_1/
/projektname/src/component_1/initcomponent.h
/projektname/src/component_1/views
/projektname/src/component_1/manager
/projektname/src/component_1/models
/projektname/src/component_1/controller
/projektname/src/component_1/resources
/projektname/src/component_2/
/projektname/src/component_2/initcomponent.h
/projektname/src/component_2/views
/projektname/src/component_2/manager
/projektname/src/component_2/models
/projektname/src/component_2/controller
/projektname/src/component_2/resources

Unterhalb von /src sind die Sourcen zu finden. Um das Projekt in logische Einheiten zu unterteilen, gibt es darunter ein Verzeichnis pro Komponente. Die Unterteilung soll später dabei helfen, dass Entwickler-Teams in verschiedenen Bereichen arbeiten können ohne sich gegenseitig zu behindern. Zudem soll eine leichtere Wiederverwertbarkeit von Komponenten damit gefördert werden. Es empfiehlt sich deshalb, die einzelnen Komponenten auch durch Namensräume von einander zu trennen. Z.B:

ProjectName::ComponentOne::View

Für das Kernmodul, in dem die grundliegenden Kernfunktionen der Webapplikation abgelegt sind,  empfiehlt es sich einen Namensraum wie „ProjectName::Core“ zu verwenden, natürlich mit einem gleichnamigen Verzeichnis „/Core“.

Komponenten-init-Funktion

Ich rate auch zu der Konvention, für jede Komponente eine Funktion zur Initialisierung der Komponente bereit zu stellen, die in einer Datei „initcomponent.h“ abgelegt ist und den gleichen Namen trägt ( also: „initcomponent()“). Diese Funktion sollte im Haupt- Programm (wahrscheinlich in der main()-Funktion) aufgerufen werden. Diese Funktion sollte alle notwendigen Vorbereitungen treffen, die für die Arbeit der Komponente wichtig sind. Das könnte z.B. die Konfiguration des Routings sein, oder die Initialisierung einer Random-Funktion für bessere Zufallszahlen.


Creative Commons Lizenzvertrag