Ho la seguente dipendenza circolare che vorrei eliminare. Penso di avere un difetto nel mio design. E apprezzerei molto qualsiasi feedback su come risolvere questo problema.
La mia dipendenza circolare proviene da 3 classi importanti. Worker , WorkingContext e TaskManager .
Per prima cosa, ho classi di 2 Worker ( Worker e WorkerGroup ). Ogni Worker viene creato con un oggetto WorkingContext che memorizza informazioni sullo stato.
class Worker
{
Worker(WorkingContext * context);
};
class WorkerGroup
{
};
Successivamente, ho WorkingContext .
class WorkingContext
{
// state info and various getters
...
TaskManager * getTaskManager();
};
Come mostrato, una delle cose che WorkingContext memorizza è una TaskManager , che ha un numero di funzioni utili che dipendono da Worker . Ecco uno snippet
class TaskManager
{
void assignCredit(Worker * worker, WorkerGroup * group, int credit);
void revokeCredit(Worker * worker, int credit);
};
La dipendenza circolare è che Worker.h ha bisogno di #include "WorkingContext.h" , che ha bisogno di #include "TaskManager.h" , che a sua volta ha bisogno di #include "Worker.h" .
In questo momento funziona perché sto usando il riferimento futuro, ma questa è davvero l'ultima risorsa.