Ik loop tegen het volgende Circular Unit reference probleem aan in Delphi, en zie niet echt een mooie oplossing
Situatie:
Er zijn 3 klassen die elk een eigen unit hebben level, network en levelconfig.
Bij de creatie van een level krijgt hij een levelconfig mee.
levelconfig bestaat uit een aantal velden oa: NrPlayers,filename, Network:Tnetwork
Hierin staat welk level gespeeld wordt, en hoeveel spelers etc.
Er staat ook een Network component in, want het level moet data kunnen versturen naar het Netwerkcomponent.
In TLevel wordt deze gehele klasse opgeslagen in een variabele, en deze data wordt dan uitgelezen.
Het netwerkcomponent vult de levelconfig, en roept daarna de Constructor van level aan
Ons netwerkalgoritem is gebaseerd op een tokenring, dus als het token ontvagen wordt, moet bepaalde methoden van
het level object aangeroepen worden.
Het probleem:
Network uses Level, LevelConfig
Level uses Network //deze uses staat bij implementation, dus dat is geen probleem
LevelConfig uses Network
Ik wil in levelconfig een klasse opslaan van een type dat gedefinieerd is in network
En in Network wil ik een klasse creeeren die gedefinieerd is in LevelConfig
Oplossing:
Ik heb denk ik wel een oplossing, maar deze vind ik zeer lelijk.
Het NetWorkveld in LevelConfig van het type TObject maken,
en dan in TLevel elke keer als het gebruikt wordt een cast maken naar TNetwork
Een andere oplossing is om LevelConfig en NetWork in een unit te gooien, maar dit is ook lelijk.
Weet iemand hoe ik dit anders kan doen? Liefst zonder het hele ontwerp om te gooien.
Situatie:
Er zijn 3 klassen die elk een eigen unit hebben level, network en levelconfig.
Bij de creatie van een level krijgt hij een levelconfig mee.
levelconfig bestaat uit een aantal velden oa: NrPlayers,filename, Network:Tnetwork
Hierin staat welk level gespeeld wordt, en hoeveel spelers etc.
Er staat ook een Network component in, want het level moet data kunnen versturen naar het Netwerkcomponent.
In TLevel wordt deze gehele klasse opgeslagen in een variabele, en deze data wordt dan uitgelezen.
Het netwerkcomponent vult de levelconfig, en roept daarna de Constructor van level aan
Ons netwerkalgoritem is gebaseerd op een tokenring, dus als het token ontvagen wordt, moet bepaalde methoden van
het level object aangeroepen worden.
Het probleem:
Network uses Level, LevelConfig
Level uses Network //deze uses staat bij implementation, dus dat is geen probleem
LevelConfig uses Network
Ik wil in levelconfig een klasse opslaan van een type dat gedefinieerd is in network
En in Network wil ik een klasse creeeren die gedefinieerd is in LevelConfig
Oplossing:
Ik heb denk ik wel een oplossing, maar deze vind ik zeer lelijk.
Het NetWorkveld in LevelConfig van het type TObject maken,
en dan in TLevel elke keer als het gebruikt wordt een cast maken naar TNetwork
Een andere oplossing is om LevelConfig en NetWork in een unit te gooien, maar dit is ook lelijk.
Weet iemand hoe ik dit anders kan doen? Liefst zonder het hele ontwerp om te gooien.