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.