Структура проекта

Приветствую всех!

В общем интересует меня вот что: структура проектов с большим количеством файлов.

Обычно у меня один класс - один хедер и один или несколько cpp. Но когда проект разрастается, начинаются проблемы. Все усложняет огромное количество инклудов, хедеров и cpp. Приходится шаманить с pragma once, предварительными объявлениями, указателями на классы, экстернами и прочей ерундой.

Для связей между частями модульной структуры, меня одно время устраивал общий хедер куда инклудятся все другие хедеры проекта. К примеру:

C++Выделить код

1
2
3
4

//file "common.h"
#include "class1.h"
#include "class2.h"
#include "class3.h"

Кто как делает, как лучше и правильней организовывать структуру крупного проекта?

Как составляется структура папок и файлов исходников?

Как правильно разместить класс в файлах (например, объявление class MyClass в .h, реализация MyClass::Method() в .cpp)?

Как что куда правильнее инклудить и т.д? Например де-то слышал, что нельзя инклудить хедер в хедер и т.д.

Ковырял исходники каких-то движков, чтобы посмотреть как это устроено там, но честно говоря, мало чем помогло...