Una de las formas populares para organizar directorio del proyecto es más o menos así:C++ fuente del proyecto de diseño de código
MyLib +--mylib_class_a.h mylib_class_a.cpp mylib_library_private_helpers.h mylib_library_private_helpers.cpp MyApp +--other_class.h other_class.cpp app.cpp
app.cpp
:
#include "other_class.h"
#include <mylib_class_a.h> // using library MyLib
Todos .h
y .cpp
archivos de la misma biblioteca son en el mismo directorio. Para evitar la colisión de nombres, los nombres de los archivos suelen ser prefijados con el nombre de la empresa o el nombre de la biblioteca. MyLib estará en la ruta de búsqueda del encabezado de MyApp, etc. No soy partidario de poner nombres de archivos prefijados, pero me gusta la idea de mirar el #include
y saber exactamente a dónde pertenece ese archivo de encabezado. No odio este enfoque de organizar archivos, pero creo que debería haber una mejor manera.
Como comienzo un nuevo proyecto, deseo solicitar algunas ideas de organización de directorios. Actualmente me gusta esta estructura de directorios:
ProjA +--include +--ProjA +--mylib +--class_a.h +--app +--other_class.h +--src +--mylib +--class_a.cpp library_private_helpers.h library_private_helpers.cpp +--app +--other_class.cpp app.cpp util.h
app.cpp
:
#include "util.h" // private util.h file
#include <ProjA/app/other_class.h> // public header file
#include <ProjA/mylib/class_a.h> // using class_a.h of mylib
#include <other3rdptylib/class_a.h> // class_a.h of other3rdptylib, no name collision
#include <class_a.h> // not ProjA/mylib/class_a.h
#include <ProjA/mylib/library_private_helpers.h> // error can't find .h
.cpp
archivos y privado (sólo visible para la biblioteca inmediata) .h
archivos se almacenan en el directorio src (src es a veces llamado lib). Los archivos de encabezado públicos están organizados en una estructura de directorio de proyecto/lib e incluidos a través de <ProjectName/LibraryName/headerName.h>
. Los nombres de archivo no tienen prefijos. Si alguna vez necesité empaquetar MyLib para ser utilizado por otros equipos, simplemente podría cambiar mi archivo MAKE para copiar los archivos binarios apropiados y todo el directorio include/ProjA.
Una vez que los archivos se controlan en el control de origen y las personas comienzan a trabajar en ellos, será difícil cambiar la estructura del directorio. Es mejor hacerlo bien en el primer momento.
¿Alguien con experiencia organizando código fuente como este? ¿Algo que no te gusta de él? Si tienes una mejor manera de hacerlo, me gustaría mucho escucharlo.
Estoy de acuerdo en que será excesivo al principio. Mi preocupación es cuando el proyecto se ponga en marcha, y el crecimiento a un tamaño decente, nadie querrá pasar el tiempo para reorganizar todos los archivos y cambiar todas las rutas de inclusión. –
Bueno, eso podría ser cierto. Pero, parece que está interesado en mantener todo en orden, ¡así que podría hacerlo! Trabajo en una compañía con aproximadamente 60 desarrolladores divididos en equipos. Hace un par de semanas, varios equipos dedicaron unos días a reorganizar sus archivos. Mantener las cosas organizadas es un proceso continuo ... un buen código de refactores de programador cuando se sale de control, por ejemplo, cuando un archivo de código se vuelve demasiado grande y se vuelve difícil de administrar, deben dividirlo. Es lo mismo con una carpeta de archivos. –
Estos equipos nunca podrían haber predicho hace 3 años qué estructura necesitarían ahora. Si hubieran intentado adivinar entonces, creo que habrían terminado necesitando reorganizarse de todos modos. Entonces, no debería preocuparme por eso. Si está tratando de desarrollar una buena práctica al inicio de un proyecto, es mejor que dedique su tiempo a buscar una buena forma de organizar cómo probar el código en forma unitaria, y cómo realizar pruebas para ejecutarlo como parte de una construcción automatizada ... porque las pruebas unitarias definitivamente son algo difícil de introducir una vez que estás en camino. –