Ik worstel nu al een tijdje met de volgende situatie:
Ons systeem kent "Items" deze items hebben een id, name, state, omschrijving, enz enz maar ook een "gepland gedeelte" (startDate, deadLine).
Idee:
Een planner maakt "plannedItems" aan die een name, state, startDate en deadLine hebben.
Nadat een gepland item is gemaakt kan een andere gebruiker deze geplande items aanvullen met 'concrete' informatie en verandert ons gepland item in een (concreet) item.
Echter een gebruiker kan een item aanmaken zonder dat er ooit geplande informatie bij aanwezig is.
Hoe los je nu zo iets technisch op?
Je kan alle informatie in 1 klasse "Item" laten en waarbij bepaalde velden nooit zullen gebruikt worden. Als de gebruiker een gewoon item maakt, zullen de voorziene velden voor een planned item leeg zijn.
Dit is de meest eenvoudige oplossing
Composition - 2 klassen Item en PlannedItem
Een item kent een plannedItem. Op het moment van het aanmaken van een item er de referentie naar een plannedItem leeg en zal nooit aangevuld worden.
Als de gebruiker echter een plannedItem wil aanmaken, moet er ook een item aangemaakt worden, want de algemene informatie zoals de naam, state, omschrijving over dit item horen thuis in het item en niet het plannedItem.
Dus het plannedItem kent een referentie naar het Item waar het bijhoort. Of is het nu omgekeerd? Je maakt een plannedItem aan, je geeft de informatie door naar het item + referentie. Het item kent het plannedItem maar niet omgekeerd? Wie moet nu wie kennen?
Waarom composition?
Het item heeft een plannedItem(gedeelte). Dus een item bestaat uit zijn velden en het eventuele bijhorende plannedItem. Has-a relationship geldt hier
Inheritance - PlannedItem extends Item
Een plannedItem is een soort van item, en extends dus een item. De planner maakt een plannedItem aan, de algemene intem informatie wordt naar de superklasse doorgespeeld, de planned informatie blijft in het plannedItem.
Als de gebruiker een gewoon item aanmaakt kan dit, zolang Item geen abstracte klasse is.
Waarom Inheritance?
De relatie Is-a geldt hier. Een plannedItem is een soort van Item.
Ik had een tijdje de indruk dat compositie de way to go was, maar daar ben ik hoe langer hoe minder zeker van. Zeker omdat dit geen relatie is zoals "een auto heeft een motor" maar het gevoel "een planneditem is een item"
Iemand die een klare kijk heeft op deze situatie?
Oh ja, al deze info moet met hibernate geannoteerd worden dus het kan nog complex worden
Alle input wordt zeer gewaardeerd.
Ons systeem kent "Items" deze items hebben een id, name, state, omschrijving, enz enz maar ook een "gepland gedeelte" (startDate, deadLine).
Idee:
Een planner maakt "plannedItems" aan die een name, state, startDate en deadLine hebben.
Nadat een gepland item is gemaakt kan een andere gebruiker deze geplande items aanvullen met 'concrete' informatie en verandert ons gepland item in een (concreet) item.
Echter een gebruiker kan een item aanmaken zonder dat er ooit geplande informatie bij aanwezig is.
Hoe los je nu zo iets technisch op?
Je kan alle informatie in 1 klasse "Item" laten en waarbij bepaalde velden nooit zullen gebruikt worden. Als de gebruiker een gewoon item maakt, zullen de voorziene velden voor een planned item leeg zijn.
Dit is de meest eenvoudige oplossing
Composition - 2 klassen Item en PlannedItem
Een item kent een plannedItem. Op het moment van het aanmaken van een item er de referentie naar een plannedItem leeg en zal nooit aangevuld worden.
Als de gebruiker echter een plannedItem wil aanmaken, moet er ook een item aangemaakt worden, want de algemene informatie zoals de naam, state, omschrijving over dit item horen thuis in het item en niet het plannedItem.
Dus het plannedItem kent een referentie naar het Item waar het bijhoort. Of is het nu omgekeerd? Je maakt een plannedItem aan, je geeft de informatie door naar het item + referentie. Het item kent het plannedItem maar niet omgekeerd? Wie moet nu wie kennen?
Waarom composition?
Het item heeft een plannedItem(gedeelte). Dus een item bestaat uit zijn velden en het eventuele bijhorende plannedItem. Has-a relationship geldt hier
Inheritance - PlannedItem extends Item
Een plannedItem is een soort van item, en extends dus een item. De planner maakt een plannedItem aan, de algemene intem informatie wordt naar de superklasse doorgespeeld, de planned informatie blijft in het plannedItem.
Als de gebruiker een gewoon item aanmaakt kan dit, zolang Item geen abstracte klasse is.
Waarom Inheritance?
De relatie Is-a geldt hier. Een plannedItem is een soort van Item.
Ik had een tijdje de indruk dat compositie de way to go was, maar daar ben ik hoe langer hoe minder zeker van. Zeker omdat dit geen relatie is zoals "een auto heeft een motor" maar het gevoel "een planneditem is een item"
Iemand die een klare kijk heeft op deze situatie?
Oh ja, al deze info moet met hibernate geannoteerd worden dus het kan nog complex worden
Alle input wordt zeer gewaardeerd.