Все мы рано или поздно переходим тот рубеж, когда писать хелловорлды становится скучно и хочется создавать что-нибудь большое и крутое. Но чтоб проект не превратился в большую воняющую кучу кода, нужно грамотно подходить к его организации.
Хотелось бы услышать мнения на счёт того, как вы организуете код своих проектов(желательно C++). Речь не только про раскладывание кода по директориям и названия переменных, но и про архитектуру в общем.
Я, например, вижу для себя следующий вариант.
Кратко про код стайл(в принципе можете не читать, их тыщи, этот просто нравится мне):
spoilerИмена классов с большой буквы в CamelCase, например class EventHandler;
.
Названия объектов аналогично, но первая буква маленькая, например Image backgroundImage;
.
Названия примитивных типов(int, char, double, etc) маленькими через нижнее подчёркивание, например double percent_of_fails;
Названия методов с мальнькой в camelCase и отражают действие функции, например void addModule(std::shared_ptr<Module> module);
Структура файлов:
Пример:
engine/
|
|-engine.i
|-core.h
|-core.cpp
|-math/
|
|-math.i
|-vector3d.h
|-vector3d.cpp
|-scene/
|-
|-scene.i
|-scene.h
|-scene.cpp
|-object.h
|-object.cpp
*.h файлы содержат традиционный костыль в виде
#ifndef FILE_H
, ну или
#pragma once
. Первым идёт инклуд C++ хедеров, затем сторонние библиотеки типа буста, затем *.i файл из данной директории и после всё остальное. Сущности в каждой директории имеют своё одноимённое пространство имён, т.е.
engine::Core
,
engine::math::Vector3D
и т.д.
*.i файлы содержат:
1 forward declarations(чтоб не замусоривать ими остальные файлы)
2 инклуды всех *.h файлов из данной директории. Спорный пункт, т.к. при небольших изменениях кода нужно будет много перекомпилировать, но зато очень удобно подключать нужный пакет(если говорить в терминах современных ЯП) инклудом *.i файла.
В идеале это всё нужно автоматизировать и скрыть за синтаксическим сахаром вроде
@import engine
@from engine::math import *
Покритикуйте мой вариант. Также буду рад почитать примеры организации кода в ваших проектах. Спасибо.