OOP design hulp nodig
Ik ben bezig met een applicatie, die voor een deel op de computer zelf draait.
Nu heb ik eigenlijk 2 belangrijke klassen: Project en ProjectWindow
Dit is een algemene OOP vraag.
Wat ik een "project" noem is een tekstdocument (dat je naar een server kunt sturen) dit is een heel algemene klasse, er kunnen nog heel veel andere klassen zijn die een deel van het "project" vormen (voor input checks, opslaan, verzenden etc.)
Van deze twee klassen kunnen onbeperkt objecten worden gemaakt, je kunt dus meerdere project vensters tegelijk open hebben staan, en dus met meerdere projecten bezig zijn (zie het als meerdere word documenten die je open hebt staan)
Deze beide objecten horen steeds bij elkaar, elk projectWindow kan maar 1 project hebben.
Wat is nu beter OOP: Een ProjectWindow object als property het Project object geven, of juist een Project object een ProjectWindow object geven (omgedraaid)
Ik denk dat ik later heel vaak een reference nodig heb van beide klassen. Mijn probleem is heel vaak dat ik niet aan een klasse kan komen omdat ik er geen "callback" of "reference" naar heb in de laag waar ik bezig ben (begrijpen jullie wat ik bedoel)
Ik heb ook al bedacht om beide klassen een property te geven van de andere klasse. (dus Project heeft ProjectWindow als property, en ProjectWindiw heeft Project als property)
Jullie weten misschien wel dat deze vraag niet 100% PHP is, maar ik heb dit probleem vaker, en nu heb ik een redelijk voorbeeld om deze vraag eindelijk te stellen.
Op een rijtje:
klasse A en B heb je bijna altijd bij elkaar nodig
A moet B kunnen manipuleren, en andersom.
Wat je wil krijgen is A <---> B
Maar je maakt A en B vrijwel altijd tegelijk,
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
$a = new A($b); // Kan sowieso niet
$b = new B($a);
// Dus je zou dit kunnen doen (is vaak een oplossing)
$a = new A(new B);
// Je hebt nu A --> B
// Of omgekeerd
$b = new B(new A);
// Je hebt nu A <-- B
// Of zo probeer je het
$a = new A();
$b = new B();
$a->setB($b);
$b->setA($a);
// Is de laatste manier oke?
?>
$a = new A($b); // Kan sowieso niet
$b = new B($a);
// Dus je zou dit kunnen doen (is vaak een oplossing)
$a = new A(new B);
// Je hebt nu A --> B
// Of omgekeerd
$b = new B(new A);
// Je hebt nu A <-- B
// Of zo probeer je het
$a = new A();
$b = new B();
$a->setB($b);
$b->setA($a);
// Is de laatste manier oke?
?>
Gewijzigd op 13/01/2014 16:33:15 door Mark Hogeveen
Maar naar mijn mening moet je dit niet overvloedig gaan gebruiken. Je hebt in heel veel gevallen niet allebei de references nodig en dan moet je ze, imo, ook niet allebei gaan gebruiken.
En semantisch gezien? Even niet met de indeling, maar met benaming enzo
1. "Een project zit (altijd) in een window"
of
2. "Een project heeft (altijd) een window"
Ookal hebben beide klassen een verbinding naar elkaar.
Als we het er toch over hebben. Gewoon wat klinkt er beter? 1 of 2?
Gewijzigd op 13/01/2014 16:36:53 door Mark Hogeveen